如何删除波浪号 (~) 文件夹?

Ada*_*son 10 shell filenames rm

我需要删除主目录中的“~”文件夹。

我现在意识到这rm -R ~是一个糟糕的选择。

我可以安全使用rm -R "~"吗?

fro*_*utz 20

理论上是的。在实践中通常也是如此。如果您调用的 shell 脚本或别名执行了一些奇怪的操作,那么可能不会。

您可以使用echo查看特定命令将被 shell 扩展为什么:

$ echo rm -R ~
rm -R /home/frostschutz
$ echo rm -R "~"
rm -R ~
Run Code Online (Sandbox Code Playgroud)

请注意,echo删除了""所以你不应该复制粘贴它打印的内容。它只是表明,如果你给"~",命令字面上看到,~而不是扩展的/home/frostschutz路径。

如果您对任何命令有任何疑问,如果出现问题,从致命性较低的命令开始如何?在您的情况下,您可以从重命名而不是彻底删除它开始。

$ mv "~" delete-me
$ ls delete-me
# if everything is in order
$ rm -R delete-me
Run Code Online (Sandbox Code Playgroud)

对于通常甚至不应该存在的混淆文件名(例如~其他名称以~or开头,或包含换行符等),安全总比抱歉好。

还可以考虑使用制表符补全(类型ls ~<TAB><TAB><TAB>),大多数 shell 会尽力照顾你,这也有助于避免输入错误的常规文件名。

  • 第二个建议(`mv "~" delete-me` 等)非常好。这确实有助于避免错误输入/误解命令的压力。 (3认同)

And*_*ton 8

正如 Kalvin Lee 提到的,您可以cd到目录并删除其内容,然后使用rmdir删除目录。我推荐这种rm -R方法,因为您不太可能对命令进行粗指并破坏您的主目录。

通常,您可以将不希望 shell 展开的内容放在单引号中。这将删除一个名为 的空目录~

rmdir '~'
Run Code Online (Sandbox Code Playgroud)


jll*_*gre 5

除了froschutz的双引号方法,还有Andy的简单引用方法,还有更短的:

rm -r \~
Run Code Online (Sandbox Code Playgroud)

和相对路径一:

rm -rf ./~
Run Code Online (Sandbox Code Playgroud)