找到这个帖子(删除名称中带有连字符的 UNIX 目录),但没有任何效果。目录显然在那里,但似乎没有找到或删除它的方法——注意甚至通过 inode。
这是在 Oracle Linux 6(RHEL 的衍生产品)上,请注意名为“-p”的目录
[root@vbpsprod6 /]# ls -li |grep p
2621441 drwxr-xr-x. 2 root root 4096 May 7 2015 cgroup
2359297 drwxr-xr-x. 4 root root 4096 Aug 25 10:02 opt
1835010 drwxr-xr-x. 2 root root 4096 Aug 25 10:14 –p
1 dr-xr-xr-x 93 root root 0 Aug 25 10:34 proc
393217 drwxrwxrwt. 3 root root 4096 Aug 25 10:29 tmp
[root@vbpsprod6 /]# find . -inum 1835010 -exec ls -li {} \;
total 0
find: `./proc/3259/task/3259/fd/5': No such file or directory
find: `./proc/3259/task/3259/fdinfo/5': No such file or directory
find: `./proc/3259/fd/5': No such file or directory
find: `./proc/3259/fdinfo/5': No such file or directory
[root@vbpsprod6 /]# rm -- -p
rm: cannot remove `-p': No such file or directory
[root@vbpsprod6 /]# find . -type d -name '-p' -delete
[root@vbpsprod6 /]# ls -li |grep p
2621441 drwxr-xr-x. 2 root root 4096 May 7 2015 cgroup
2359297 drwxr-xr-x. 4 root root 4096 Aug 25 10:02 opt
1835010 drwxr-xr-x. 2 root root 4096 Aug 25 10:14 –p
1 dr-xr-xr-x 93 root root 0 Aug 25 10:34 proc
393217 drwxrwxrwt. 3 root root 4096 Aug 25 10:29 tmp
[root@vbpsprod6 /]#
答案1
从man rm(1)
:
To remove a file whose name starts with a '-', for example '-foo', use one of these commands: rm -- -foo rm ./-foo
$ mkdir -- -p
$ ls -l --directory -- -p
drwxrwxr-x. 2 alexus alexus 4096 Aug 25 12:21 -p
$ rm --interactive --recursive -- -p
rm: remove directory ‘-p’? y
$ echo $?
0
$ ls -l --directory -- -p
ls: cannot access -p: No such file or directory
$
$ mkdir -- -p
$ ls -l --directory -- -p
drwxrwxr-x. 2 alexus alexus 4096 Aug 25 12:21 -p
$ rmdir ./-p
$ echo $?
0
$ ls -l --directory -- -p
ls: cannot access -p: No such file or directory
$
答案2
您可以使用--
将这些 shell 命令中的参数与实参分开。
就你的情况来说,rmdir -- -p
可以完成这个工作。
您也可以通过指定文件/目录的本地路径来执行此操作;
例如rmdir ./-p/
两种方法均可。