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

JD *_*cks 111 uninstall delete

当我在 Mercurial 中恢复时,它会留下几个.orig文件。我希望能够运行一个命令来删除所有这些。

我找到了一些说要运行的来源:

rm **/*.orig
Run Code Online (Sandbox Code Playgroud)

但这给了我这样的信息:

rm: cannot remove `**/*.orig': No such file or directory
Run Code Online (Sandbox Code Playgroud)

我也试过这些命令:

rm -rv *.orig
rm -R *\.orig
Run Code Online (Sandbox Code Playgroud)

Oli*_*Oli 202

使用find命令(小心!)

find . -name '*.orig' #-delete
Run Code Online (Sandbox Code Playgroud)

我已经注释掉了删除命令,但是一旦你对它匹配的内容感到满意,只需#从行中删除它,它就会删除所有这些文件。

  • 一定要在标志的 _end_ 处留下 `-delete`。`找到。-delete -name '*.orig'` 将忽略过滤器并破坏整个目录。 (15认同)
  • @FrankBarcenas 是的 - find 递归地执行所有操作。如果你想限制它的工作方式,你可以使用 `-maxdepth` 或 `-mindepth` 参数。 (3认同)
  • @迈克尔,是的。我已经用 `git clean -fdx` 解决了这个问题 (2认同)

小智 15

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

find ./ -name ".orig" -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)

  • 使用 `-delete` 有什么好处? (4认同)

小智 7

以下是我通常会做的

find ./ -name "*.orig" | xargs rm -r
Run Code Online (Sandbox Code Playgroud)

最好通过检查xargs. 下面将打印出您找到的文件。

find ./ -name "*.orig" | xargs
Run Code Online (Sandbox Code Playgroud)

如果您发现某个文件不想删除,请调整您的首字母find或添加一个grep -v步骤,这将省略匹配项,即

find ./ -name "*.orig" | grep -v "somefiletokeep.orig" | xargs rm -r
Run Code Online (Sandbox Code Playgroud)


小智 6

我已经删除了所有以 .nfs000000000 开头的文件

rm .nfs000000000*
Run Code Online (Sandbox Code Playgroud)