删除带有连字符的目录

find这个线程( 删除名称中带有连字符的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 /]# 

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 $ 

您可以使用--使用这些shell命令从参数中分离参数。

在你的情况下, rmdir -- -p将完成这项工作。

你也可以通过指定文件/目录的本地path来做到这一点;

例如rmdir ./-p/

两者都有效。