rm命令:删除文件名包含括号的文件


2

我试图删除Windows 7目录中包含括号的文件名的所有文件; ()

使用MinGW:

rm *(*)*

我收到一个错误:

sh: syntax error near unexpected token '('

我认为这是因为 rm command将括号视为某种特殊输入。我该怎么做呢?

Answers:


3

您可以通过使用反斜杠作为前缀来“转义”特定的元字符。

$ touch 'aaa(bbb)ccc'
$ rm *\(*\)*
$ ls
$

rm '*(*)*' 给我 rm: cannot lstat *( ': 没有相应的文件和目录 . rm *(*)*`有效(但也希望删除具有此匹配的目录,但这也是OP的原始要求,给出错误行)。
Rik

使用引号对我不起作用。尽管逃脱反斜杠确实如此。 @Rik - 道歉 - 我并不具体。我正在查看的目录没有子目录。
atomh33ls

1
@RedGrittyBrick第一种方法 只要 适用于 文件命名 *(*)*OP希望继续努力 所有 ()。自己尝试一下 touch 'a(b)c'。然后 rm '*(*)*' 不起作用 所有 这些文件。也不是在Linux上的bash!该 rm *\(*\)* 确实适用于Linux和mingw。
Rik

1
@Rik:谢谢,我知道这一点(这就是为什么我提到“所有元字符”) - 但是在这个答案中包含它可能会让人感到困惑 - 我会删除它。
RedGrittyBrick

3

您可以执行以下操作:

find . -type f -name "*(*)*" -delete -maxdepth 1

为了测试,我会使用 -print 论证第一:

find . -type f -name "*(*)*" -print -maxdepth 1

如果要在所有子目录中执行此操作,可以省略 -maxdepth 1

如果 -delete 不起作用你可以尝试:

find . -type f -name "*(*)*" -exec rm -rf {} \;

编辑: 包括在内 -type f 只对文件(而不是目录)执行此操作 rm

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.