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

Kat*_*sen 14 unix unix-shell

通过我笨手笨脚的操作,我不小心创建了一个名为(例如)-A 的目录,并最终用文件填充了它。

我想删除该目录。我试过了:

rmdir -- -A
Run Code Online (Sandbox Code Playgroud)

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

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

Moo*_*Moo 29

在每个命令上使用 --。

$ 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 ..
Run Code Online (Sandbox Code Playgroud)


chr*_*ris 11

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

您还可以发出选项 -- 它告诉 rm 将 -- 之后的所有内容都视为文件名,并且不应处理更多选项。可能有不遵守这一点的时髦的旧版本 rm,尽管这些天我的古董 unix 动物园已经变得非常小,所以我无法告诉您哪些版本或是否有不理解的版本 --。

无论如何,您应该养成在删除时将 ./ 放在名称前面的习惯——您永远不知道目录中是否有 -r 或 -rf 命名文件。你可以说你应该总是使用 -- 但我发现 ./ 更自然,因为它明确表示“我想删除这个目录中的文件,而不是 * 碰巧要删除的任何文件”