![如何创建一个空名称的文件?](https://linux22.com/image/33911/%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%A9%BA%E5%90%8D%E7%A7%B0%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我不知道怎么做,但我创建了一个文件名为空的文件,我怀疑那里有空格(我将在最后解释原因):
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 键时,它会被替换为 \" ",但事实并非如此。
答案1
不可能有一个空名称的文件。您所拥有的是一个名称完全由空白或不可打印字符组成的文件。
要准确查看文件名是什么,请运行LC_CTYPE=C ls -b
.这将用八进制转义符替换所有空白或不可打印字符。例如,名称为单个零宽度空格的文件将被列为\342\200\213
.
您可以使用一个 glob 来隔离此文件,该 glob 会排除具有好名称的文件。例如,您可以尝试列出名称不以字母开头的文件。
chaouche@karabeela /mnt/ubuntu/storage $ ls -d [^A-Za-z]*
不要忘记选项-d
,以便ls
列出目录本身而不是其内容。
您应该将该文件重命名为合理的名称。您可以依赖 shell 的完成功能,或使用仅与此文件匹配的 glob。
mv [^A-Za-z]* windows-programs
答案2
它可能是名称中仅包含空格或非打印字符的目录。此外,除了“.”之外,它似乎只有一个条目。和“..”,这就是为什么您会在第一个命令的输出的第二列中看到“3”。您始终可以使用stat
以下方式打印目录名称:stat -f "'%N'" *
。如果它无法打印,您可能需要将其通过管道传输cat -v
或od -c
查看它实际上是什么。
要删除它,您可能必须运行rmdir -- 'dirname'
(将“dirname”替换为目录名称。如果其中包含无法打印的名称,您可能需要使用 glob),尽管正如我之前所说,它似乎包含内容,因此您可以必须进入该目录cd -- 'dirname'
并检查其内容。
我建议您不惜rm -rf
一切代价避免使用,因为目录命名问题很容易搞乱。