删除名称中带有连字符的UNIX目录

通过我的头脑机动,我不小心创build了一个名为(例如)-A的目录,并最终填充了文件。

我想删除所述目录。 我试过了:

rmdir -- -A 

但它告诉我,该目录中仍然有文件。 而我不知道如何进入目录删除所述文件。

我该如何摆脱这个麻烦的目录呢?

使用 – 在每一个命令。

 $ ls -la total 32 drwxr-xr-x 3 richard richard 512 Jul 28 15:44 . drwxr-xr-x 3 root wheel 512 Jul 6 17:10 .. $ mkdir -- -A $ ls -la total 36 drwxr-xr-x 2 richard richard 512 Jul 28 15:44 -A drwxr-xr-x 4 richard richard 512 Jul 28 15:44 . drwxr-xr-x 3 root wheel 512 Jul 6 17:10 .. $ cd -- -A $ ls $ pwd /home/richard/-A $ cd .. $ rm -rf -- -A $ ls -la total 32 drwxr-xr-x 3 richard richard 512 Jul 28 15:44 . drwxr-xr-x 3 root wheel 512 Jul 6 17:10 .. 

你可以把./放在文件的前面 – 这样,rm或者rmdir就不会像文件名是一个选项标志那样工作。

你也可以发出这个选项 – 它告诉rm像后面的所有东西一样是一个文件名,它不应该处理更多的选项。 虽然我的古董unix的动物园这些日子已经变得很小,所以我不能告诉你哪些版本或者是不明白的版本。

当你删除的时候,你应该养成把./放在名称前面的习惯 – 你永远不知道你的目录里是否有一个名为-r或-rf的文件。 你可以说你应该总是使用 – 但是我发现./更自然,因为它明确指出“我想删除这个目录中的文件,而不是任何事情发生到”

重命名它,然后正常处理它:

 $ mv -- -A foo $ find foo $ rm -rf foo 

rmdir不会删除里面有任何东西的目录。 “rm -rf”会的。 rmdir比“rm -rf”更安全。 Moo的回答可能还是最好的。

 rm -fr ./-A 

以上命令适用于我。

一种不同的方法是通过inode删除(这适用于其他字符的文件/目录,只有rm很难删除)。

 bash-3.2$ ls -i 4905937 angry-1.gif 5174052 hermes 5172770 make_hosts.pl bash-3.2$ find . -inum 5172770 -exec rm -f {} \; bash-3.2$ ls -i 4905937 angry-1.gif 5174052 hermes bash-3.2$ 

find可以这样删除目录:

 find . -type d -iname '-A' -delete