删除所有以括号开头的文件

删除所有以括号开头的文件

我的目录中有许多以括号开头的文件。它们是由 Dropbox 由于冲突而生成的。任何转义组合似乎都没有帮助:

rm -rf "(*"
rm -rf "\(*"
rm -rf \(*

正如弗罗斯特舒茨提到的,它们似乎不是 ASCII 字符。我怎样才能知道是否是这种情况,以及解决方法是什么?

答案1

shell 使用某些规则解释命令行,您必须在此处考虑这些规则:

  • 您可以使用 \ 转义 shell 元字符,使其表现得像普通字符一样。

  • 您可以使用单引号或双引号,并且在这些大多数(带双引号)或所有(带单引号)shell 元字符中失去其特殊含义。

  • 引号不必位于单词边界,因此rm th"is fil"e与 相同rm "this file"

  • 字符 []?* 可用于文件名扩展。为此目的,不得引用或转义它们。

因此,适合您的情况的可能解决方案是rm -rf '('*和。我不知道为什么最后一个对你的情况不起作用。也许括号前面有一些空格?rm -rf "("*rm -rf \(*

通过以下行,您应该能够查看文件名中是否有任何有趣的字符:

for i in *; do od -c <<< "$i"; done

答案2

如果你放在*里面",否则'它不会扩展(它只是一个字面意思*)。

但你可以把*外面"

rm "("*

rm \(*但是,这与您已经发布的内容相同。因此,如果这不起作用,要么您的文件(毕竟不是以 ASCII 字符开头(有些 Unicode 字符看起来非常相似),要么您在错误的位置尝试此操作。

答案3

您可以尝试以下两件事:

1)rm -f \\(*

-r(除非你想递归地删除目录,否则 你不需要。既然你说“文件”,我就把它保留下来。rm -rf它是一个危险的工具,如果不需要,就不应该使用。)

2) rm -i *

此方法需要一些手动干预,但由于非字母数字字符往往会先排序,因此您要删除的内容往往会先出现,您可以^C在获得它们后发出 a 。

请注意,当尝试使用奇怪的通配符时,请尝试使用echoin 代替rmfirst。 尤其如果使用rm -rf.这样您就可以在删除内容之前看到 shell 认为它扩展为什么(如果有的话)。特别是因为有时这种类型的文件是由某人创建的,希望您做一些愚蠢的事情并吹走比您想要的更多的文件。

答案4

在我只需清理此类文件一次的情况下,我只需将它们列出到一个文件中:

$ ls -1 > delete-list

接下来,手动编辑delete-list,使其仅包含我要删除的文件的名称。最后:

$ xargs --delim=\\n rm < delete-list

如果名称在空格方面表现良好,那么您可以删除偏执--delim选项。

相关内容