有没有办法做' ls -R | grep“aname”* | rm; 来删除多个目录中的多个文件

有没有办法做' ls -R | grep“aname”* | rm; 来删除多个目录中的多个文件

我已经安装(编译)了 emerald。该命令make uninstall不起作用(没有 makefile,因为它只是一个脚本)。所以我决定手动删除该文件。但是有很多文件。

我试过一些方法,但是没有效果。所以我来这里寻求一些建议。

  • 是否有一个命令ls -R | grep blabla*可以添加来显示文件目录(它仅显示文件名)
  • 有真的吗ls -R | grep bla* | rm

答案1

如果“aname”是文件名的起始部分,那么它将来自当前目录:

find -name "aname" -delete 

顺便提一句。:

grep "bla"* somewhere

几乎总是错误的,因为 grep 已经进行了部分匹配,这意味着它只需使用

grep bla somewhere

由于误解,删除了答案的旧部分:

从当前目录,如果您在所有文件中查找单词“aname”,则只需使用:

find -exec grep "aname" {} ";" -delete 

答案2

xargs您正在寻找的是、find和的组合rm

find将列出所有符合您的条件的文件,然后将它们(以空字符结尾)写入stdout,然后通过管道传输到xargsxargs将采用以空字符结尾的字符串并将它们用作的参数rm

find -L /path/to/dir -name "*name*" -print0 |xargs -0 -r  rm

来源:http://linuxcommando.blogspot.com/2007/10/find-xargs-pipe.html

答案3

在其他答案之间:您可以调用rm而不需要程序xargs。事实上,您通常可以使用选项execfind代替xargs

rm对于大批量文件,尽可能少地调用:

find /path/to/dir -name "*name*" -exec rm {} +

rm为每个文件调用一次:

find /path/to/dir -name "*name*" -exec rm {} ";"

还有更详细的选项find可以在执行命令之前更改目录。

相关内容