Tệp có tên trống


8

Tôi đã viết một widget để hiển thị các tập tin trong một thư mục nhất định và tôi tự hỏi liệu tôi có cần bao gồm trường hợp một tập tin có một tên trống không.

Thử nghiệm cho thấy kết quả không rõ ràng, vì vậy tôi đã tự hỏi liệu ai đó có thông tin xác định

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

$ echo > ""
bash: : No such file or directory

Câu trả lời:


15

Một tên tệp có thể không trống. Để trích dẫn Đặc tả kỹ thuật Unix đơn, §3.170 , tên tệp là:

Tên bao gồm 1 đến {NAME_MAX} byte được sử dụng để đặt tên cho tệp. Các ký tự soạn tên có thể được chọn từ tập hợp tất cả các giá trị ký tự không bao gồm ký tự <slash> và byte null.

Vì vậy, nó phải bao gồm ít nhất 1 byte, nghĩa là không trống.

Không phải từ định nghĩa đó, không ai trong số các ký tự đó cần hiển thị (nghĩa là tất cả có thể là khoảng trắng) cũng như không cần in (tất cả đều có thể là ký tự điều khiển). Và nếu bạn giả sử tên tệp là UTF-8, thì chúng không cần.


cảm ơn! vì vậy tôi có thể sử dụng một chuỗi rỗng để biểu thị một tên tệp vắng mặt trong mã của mình. tốt đẹp
Julian Schaub - litb

Hạn chế duy nhất thực sự là cái tên không thể chứa ASCII '\0'cũng không '/'.
vonbrand

@vonbrand Yep, tôi chắc chắn sao chép câu đó (mặc dù nó không trực tiếp giải quyết câu hỏi) và sau đó nhắc lại bên dưới để chắc chắn OP biết điều đó, vì nó khá phù hợp để cố gắng hiển thị tên tệp. PS: Cảm ơn bạn đã sửa nó trong phần chỉnh sửa.
derobert

3

Tôi không nghĩ bạn có thể có một tập tin mà không có tên. Tuy nhiên, bạn có thể muốn xử lý trường hợp (khá giả) của tên tệp không có gì ngoài khoảng trắng, có thể:

$ echo "Hi" > "          "
$ echo "Bye" > "         "
$ cat "         "
Bye
$ cat "          "
Hi

2
Chúng tôi đã từng có một tệp có tên là chuỗi thoát cho "dòng trước; bắt đầu dòng" cộng với một số rác. Làm một lssố tập tin không có ở đó, ls missingcho thấy nó chỉ tốt ... cho sự bối rối cực độ của hung thủ.
vonbrand

1

Hấp dẫn. Có vẻ như bạn có thể thực hiện các tên chỉ có khoảng trắng ít nhất:

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

1

EDIT : SAI SAU.

Trong trường hợp của tôi, tên tệp không trống, nó bao gồm các ký tự không in được. Xem: Làm thế nào để bạn tạo một tập tin với một tên trống?

Câu trả lời cũ

Bạn nên. Tôi không biết làm thế nào, nhưng tôi đã tạo một tệp có tên tệp trống, tôi nghi ngờ có một khoảng trắng ở đó:

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 $

Tôi đã hỏi trên #linux cách xóa tệp và một người đề nghị tôi chuyển tất cả các tệp khác đi sau đó sử dụng hoàn thành tab, điều này mang lại một hành vi rất thú vị:

# 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 $

Nếu có một khoảng trắng trong tên tệp thì nó sẽ được thay thế bằng \ "" khi tôi nhấn phím tab, nhưng không được.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.