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

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

由于我的愚蠢行为,我意外地创建了一个名为(例如)-A 的目录,并最终在里面塞满了文件。

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

rmdir -- -A

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

我该怎么做才能摆脱这个麻烦的目录?

答案1

在每个命令上使用 --。

$ 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 ..

答案2

您可以在文件前面放置 ./ - 这样 rm 或 rmdir 就不会表现得好像文件名是一个选项标志。

您还可以发出选项 --,它告诉 rm 将 -- 后面的所有内容都视为文件名,并且它不应再处理任何选项。 可能有一些古怪的旧版本的 rm 不遵循这一点,尽管我的古董 unix 动物园最近变得非常小,所以我无法告诉您哪些或是否有版本不理解 --。

无论如何,删除文件时,您都应该养成在文件名称前面加上 ./ 的习惯——您永远不知道目录中是否有以 -r 或 -rf 命名的文件。您可能会说您应该始终使用 -- 但我发现 ./ 更自然,因为它明确表示“我想删除此目录中的文件,而不是 * 所指向的任何文件”

答案3

重命名然后正常处理:

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

答案4

rm -fr ./-A

上述命令对我有用。

相关内容