File dengan nama kosong

8

Saya sedang menulis widget untuk menampilkan file dalam direktori yang diberikan dan saya bertanya-tanya apakah saya perlu membahas kasus di mana file memiliki nama kosong.

Pengujian menunjukkan hasil yang tidak jelas, jadi saya bertanya-tanya apakah seseorang memiliki informasi yang pasti

$ touch ""
touch: cannot touch `': No such file or directory

$ echo > ""
bash: : No such file or directory
Johannes Schaub - litb
sumber

Jawaban:

15

Nama file mungkin tidak kosong. Mengutip Spesifikasi Unix Tunggal, §3.170 , nama file adalah:

Nama yang terdiri dari 1 hingga {NAME_MAX} byte yang digunakan untuk menamai file. Karakter yang menyusun nama dapat dipilih dari set semua nilai karakter kecuali karakter <slash> dan byte nol.

Jadi, itu harus terdiri dari setidaknya 1 byte, yaitu tidak kosong.

Bukan berarti dari definisi itu, tidak ada karakter yang perlu terlihat (yaitu, semua bisa menjadi spasi) dan tidak perlu dicetak (semua bisa menjadi karakter kontrol). Dan jika Anda mengasumsikan nama file adalah UTF-8, mereka tidak perlu.

derobert
sumber
Terima kasih! jadi saya bisa menggunakan string kosong untuk menunjukkan nama file yang tidak ada dalam kode saya. bagus
Johannes Schaub - litb
Satu-satunya batasan nyata adalah bahwa nama tersebut tidak dapat mengandung ASCII '\0'juga '/'.
vonbrand
@vonbrand Yap, saya memastikan untuk menyalin kalimat itu (meskipun tidak secara langsung menjawab pertanyaan) dan kemudian menegaskan kembali di bawah untuk memastikan OP tahu itu, karena cukup relevan untuk mencoba menampilkan nama file. PS: Terima kasih sudah memperbaikinya di edit.
derobert
3

Saya tidak berpikir Anda dapat memiliki file tanpa nama. Namun, Anda mungkin ingin menangani kasus (agak dibuat-buat) nama file yang hanya terdiri dari spasi, yang mungkin:

$ echo "Hi" > "          "
$ echo "Bye" > "         "
$ cat "         "
Bye
$ cat "          "
Hi
Renan
sumber
2
Kami pernah memiliki file yang namanya adalah urutan melarikan diri untuk "baris sebelumnya; mulai dari baris" ditambah beberapa sampah. Melakukan lsbeberapa file tidak ada di sana, ls missingmenunjukkannya baik-baik saja ... untuk kebingungan ekstrim pelaku.
vonbrand
1

Menarik. Sepertinya Anda dapat melakukan setidaknya nama-nama ruang putih saja:

$ touch " "
$ ls -l
total 0
-rw-r--r-- 1 user user 0 Mar  5 22:57
$ file \
 : empty
Cory J
sumber
1

EDIT : SALAH SALAH SALAH.

Dalam kasus saya nama file tidak kosong, itu terdiri dari karakter yang tidak dapat dicetak. Lihat: Bagaimana Anda membuat file dengan nama kosong?

Jawaban lama

Kamu harus Saya tidak tahu caranya, tapi saya membuat file dengan nama file kosong, saya ragu ada spasi di sana:

chaouche@karabeela /mnt/ubuntu/storage $ ls
total 352K
drwx------  3 chaouche chaouche 4.0K Feb 12 11:00
drwxr-xr-x  4 chaouche chaouche 4.0K Apr 14 23:13 AUDIO
drwxr-xr-x  5 chaouche chaouche 4.0K Jul 20 22:25 BACKUPS
-rw-r--r--  1 chaouche chaouche 310K Jun 15 13:00 cv_yassine_chaouche_2012.pdf
drwxr-xr-x  2 chaouche chaouche 4.0K Jun 10 22:16 Mageia-3-i586-DVD
drwxr-xr-x  5 chaouche     1001 4.0K Oct 12  2012 MUSIQUE
drwxr-xr-x 15 chaouche chaouche 4.0K Oct 27  2012 PARISVIII
drwxr-xr-x  6 chaouche chaouche 4.0K Jun 12 18:33 SABAYON
drwxr-xr-x  5 chaouche chaouche 4.0K Jun 15 13:23 SIFTECH
drwxr-xr-x  5 chaouche chaouche 4.0K Feb  6 15:11 TOILES
drwxr-xr-x  4 chaouche chaouche 4.0K Jul 17 17:21 VIDEOS
chaouche@karabeela /mnt/ubuntu/storage $

Saya bertanya pada #linux bagaimana cara menghapus file dan seseorang menyarankan agar saya memindahkan semua file lainnya kemudian menggunakan penyelesaian tab, yang memberikan perilaku yang sangat menarik:

# with tab completion
chaouche@karabeela /mnt/ubuntu/storage $ ls /
total 45M
-rwxr-xr-x  1 chaouche chaouche  34M Jan 16  2013 inkscape-0.48.4-1-win32.exe
-rwxr-xr-x  1 chaouche chaouche 8.6M Feb  4 11:42 mypaint-1.0.0-win32-installer.exe
-rwxr-xr-x  1 chaouche chaouche 2.7M Jan 17  2013 pdftkb_setup.exe

# without tab completion, wrote "/" by hand
chaouche@karabeela /mnt/ubuntu/storage $ ls /
total 212K
-rw-r--r--   1 root root    0 Apr 15  2012 1
drwxr-xr-x   2 root root 4.0K Dec  9  2012 bin
drwxr-xr-x   3 root root 4.0K Jun 15 12:10 boot
-rw-------   1 root root  74K Jul  1  2011 dead.letter
drwxr-xr-x  19 root root 4.2K Jul 20 20:14 dev
drwxr-xr-x 117 root root  12K Jul 20 21:30 etc
drwxr-xr-x   4 root root 4.0K Jun 12 18:40 home
drwxr-xr-x   2 root root 4.0K Jun  8  2011 initrd
drwxr-xr-x  20 root root  12K Dec  9  2012 lib
drwx------   2 root root  16K Jun  7  2011 lost+found
drwxr-xr-x   4 root root 4.0K Jul  3 01:56 media
drwxr-xr-x   9 root root 4.0K Apr 15 00:06 mnt
drwxr-xr-x   8 root root 4.0K Jun 30 23:19 opt
dr-xr-xr-x 198 root root    0 Jun 15 13:10 proc
drwxr-x---  28 root root 4.0K Jul 20 21:42 root
drwxr-xr-x   2 root root  12K Dec  9  2012 sbin
drwxr-xr-x   2 root root 4.0K Apr  3  2011 srv
drwxr-xr-x  12 root root    0 Jun 15 13:10 sys
-rw-r--r--   1 root root    0 Jun 12 18:40 thisismageia
drwxrwxrwt  69 root root  36K Jul 20 22:04 tmp
drwxr-xr-x  14 root root 4.0K Nov  6  2011 usr
drwxr-xr-x  18 root root 4.0K Jul  2  2011 var
chaouche@karabeela /mnt/ubuntu/storage $

Jika ada spasi putih dalam nama file itu akan diganti oleh \ "" ketika saya menekan tombol tab, tetapi tidak.

ychaouche
sumber