linux系统支持用户创建包含连字符(-)的文件或文件夹,一个错误的操作有时可能会产生以下文件或文件夹:

   

[root@huntdb aa]# touch /tmp/aa/{,-,\\}-{0,1,2,3,4,5}
[root@huntdb aa]# ls
-0  --0  \-0  -1  --1  \-1  -2  --2  \-2  -3  --3  \-3  -4  --4  \-4  -5  --5  \-5
[root@huntdb aa]# ll
total 0
-rw-r--r-- 1 root root 0 Apr  2 22:52 -0
-rw-r--r-- 1 root root 0 Apr  2 22:52 --0
-rw-r--r-- 1 root root 0 Apr  2 22:52 \-0
-rw-r--r-- 1 root root 0 Apr  2 22:52 -1
-rw-r--r-- 1 root root 0 Apr  2 22:52 --1
-rw-r--r-- 1 root root 0 Apr  2 22:52 \-1
-rw-r--r-- 1 root root 0 Apr  2 22:52 -2
-rw-r--r-- 1 root root 0 Apr  2 22:52 --2
-rw-r--r-- 1 root root 0 Apr  2 22:52 \-2
-rw-r--r-- 1 root root 0 Apr  2 22:52 -3
-rw-r--r-- 1 root root 0 Apr  2 22:52 --3
-rw-r--r-- 1 root root 0 Apr  2 22:52 \-3
-rw-r--r-- 1 root root 0 Apr  2 22:52 -4
-rw-r--r-- 1 root root 0 Apr  2 22:52 --4
-rw-r--r-- 1 root root 0 Apr  2 22:52 \-4
-rw-r--r-- 1 root root 0 Apr  2 22:52 -5
-rw-r--r-- 1 root root 0 Apr  2 22:52 --5
-rw-r--r-- 1 root root 0 Apr  2 22:52 \-5

我们试着用普通的rm删除时会提示:

[root@huntdb aa]# rm -f --0
rm: unrecognized option `--0'
Try `rm --help' for more information.

查看rm man手册有如下描述:

To remove a file whose name starts with a ‘-’, for example ‘-foo’, use one of these commands:
   rm -- -foo
   rm ./-foo

使用这个办法删除带\的文件进应注意进行二次转义,否则无法删除。

[root@huntdb aa]# rm -f -- \-5
[root@huntdb aa]# ls
-0  --0  \-0  -1  --1  \-1  -2  --2  \-2  -3  --3  \-3  -4  --4  \-4  --5  \-5
[root@huntdb aa]# rm -f ./\-5
[root@huntdb aa]# ls
-0  --0  \-0  -1  --1  \-1  -2  --2  \-2  -3  --3  \-3  -4  --4  \-4  --5  \-5

正确的做法如下:

[root@huntdb aa]# rm -f -- \\-5
[root@huntdb aa]# ls
-0  --0  \-0  -1  --1  \-1  -2  --2  \-2  -3  --3  \-3  -4  --4  \-4  --5
[root@huntdb aa]# rm -f ./\\-4
[root@huntdb aa]# ls
-0  --0  \-0  -1  --1  \-1  -2  --2  \-2  -3  --3  \-3  -4  --4  --5

文件夹的删除与此相同。


还可以通过inode号进行删除:

[root@huntdb aa]# ls -li | grep -- -2
2752777 -rw-r--r-- 1 root root 0 Apr  2 22:52 -2
2752783 -rw-r--r-- 1 root root 0 Apr  2 22:52 --2
[root@huntdb aa]# find . -inum 2752783 -exec rm {} \;
[root@huntdb aa]# ls -li | grep -- -2
2752777 -rw-r--r-- 1 root root 0 Apr  2 22:52 -2