删除以连字符开头的目录

删除以连字符开头的目录

找到这个帖子(删除名称中带有连字符的 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/

两种方法均可。

相关内容