名称为空的文件


8

我正在编写一个用于在给定目录中显示文件的小部件,我想知道是否需要解决文件名称为空的情况。

测试未显示明显的结果,所以我想知道某人是否具有确定的信息

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

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

Answers:


15

文件名不能为空。要引用《单一Unix规范》§3.170,文件名是:

包含1到{NAME_MAX}个字节的名称,用于命名文件。可以从除<slash>字符和空字节之外的所有字符值的集合中选择组成名称的字符。

因此,它必须至少包含1个字节,即不能为空。

并非从该定义来看,这些字符都不需要是可见的(即都可以是空白),也不需要打印(可以都是控制字符)。而且,如果您假设文件名是UTF-8,则不必如此。


谢谢!因此,我可以在我的代码中使用空字符串表示缺少的文件名。不错
Johannes Schaub-litb 2013年

唯一真正的限制是名称不能包含ASCII '\0''/'
vonbrand

@vonbrand是的,我确保复制了该句子(即使它没有直接解决问题),然后在下面重申以确保OP知道这一点,因为它与尝试显示文件名非常相关。PS:感谢您在编辑中修复该问题。
derobert

3

我认为您不能拥有一个没有名称的文件。但是,您可能想处理(而不是人为)文件名的情况,该文件名只包含空格,这是可能的:

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

2
我们曾经有一个文件,其名称是“上一行;行首”的转义序列,外加一些垃圾。ls那里没有做一些文件,ls missing这很好,...使肇事者极度困惑。
vonbrand

1

有趣。看起来您至少可以使用空白名称:

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

1

编辑:错错错。

在我的情况下,文件名不是空的,它由不可打印的字符组成。请参阅:如何创建具有空名称的文件?

旧答案

你应该。我不知道如何,但是我创建了一个带有空文件名的文件,我怀疑那里是否有空格:

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 $

我在#linux上询问如何删除文件,有人建议我将所有其他文件移开,然后使用制表符补全,这给出了一个非常有趣的行为:

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

如果文件名中有空格,当我按下Tab键时,它会被\“”代替,但是没有。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.