如何从 bash 中删除 / 中名为 * 的文件夹?

use*_*936 8 bash

比方说,我有一个命名的文件夹*/。我知道像 rm -rf * 这样的常用命令不起作用。有什么帮助吗?

Dan*_*eck 14

您可以使用单引号参数来防止 shell 进行处理。

rm -r '/*'
Run Code Online (Sandbox Code Playgroud)

使用ls(在包含文件的文件夹中)安全地测试它:

$ ls '*'
ls: *: No such file or directory
Run Code Online (Sandbox Code Playgroud)

在这种情况下,双引号也可以工作,但如果$涉及到,他们不会,因为 shell 会假设它是一个变量:

$ ls "foo$bar"
ls: foo: No such file or directory
$ ls 'foo$bar'
ls: foo$bar: No such file or directory
Run Code Online (Sandbox Code Playgroud)

对于 GNU rm,您还可以--在文件名参数之前添加,以防止它们被解析为参数。这将允许您删除命名-rf没有问题的文件。

  • @darnir 如果您不喜欢它,则不需要使用它。但是你必须知道在使用 Serge 的方法时要转义哪些字符(考虑 `&`),并单独对它们进行转义,这很容易比一次引用更费力。因此,我认为个人逃避劣等并发布了此替代方案。 (5认同)
  • @Serge 我不是说你的回答不好。它完成了工作,并被*接受*。但是,如果有多种(相当不同的)方法来实现具有不同优点和缺点的东西,请随意列出它们。它们可能不适用于所有情况,因此最好有其他选择。另请注意,遇到*类似*(不相同)问题的用户可能会收到来自 Google 的问题。如果[扩大范围](http://meta.superuser.com/a/3751) 会导致可以帮助更多人的问题,这也是一个好主意。编写范围更广的答案是一个开始。 (3认同)

Ser*_*rge 7

使用这个简短的命令:

rm /\*
Run Code Online (Sandbox Code Playgroud)