如何删除所有与模式匹配的文件?


75

当我在Mercurial中还原时,它会留下几个.orig文件。我希望能够运行命令将其全部删除。

我发现一些消息说要运行:

rm **/*.orig

但这给了我消息:

rm:无法删除`* / .orig':没有这样的文件或目录

我也尝试过:

  • rm -rv *.orig

  • rm -R *\.orig


Answers:


147

使用find命令(小心!)

find . -name '*.orig' #-delete

我已经注释掉delete命令,但是一旦您对它的匹配感到满意,只需#从行中删除,它应该删除所有这些文件。


递归有效吗?
弗兰克·巴塞纳斯

2
@FrankBarcenas是的-find递归执行所有操作。如果要限制它的工作方式,可以使用-maxdepthor -mindepth参数。
奥利(Oli)

6
绝对在标志-delete末尾离开。find . -delete -name '*.orig'将忽略过滤器并破坏整个目录。
迈克尔

1
@迈克尔,是的。我已经用git clean -fdx
kyb

1
@kamal我可能仍会使用find,但要使用它的-regex-iregex谓词。有时很难安全地解析文件名(在使用它们进行管道传输时)。
奥利(Oli)

6

“查找”具有一些非常先进的技术来搜索所有或当前目录和rm文件。

find ./ -name ".orig" -exec rm -rf {} \;

3
使用有什么好处-delete
muru

@muru我想,如果删除-rf,您将得到每个文件的提示。
彼得

@Peter不一定。即使这样,还是这样?答案使用-rf,并且find具有-ok
大师

@muru它看起来像-delete不会删除文件夹
Andrii Karaivanskyi

@AndriiKaraivanskyi除非删除失败,否则它将删除。
muru

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.