管道查找结果到另一个命令

uhh*_*hh_ 6 bash pipe find shell-script

我正在尝试扫描文件系统以查找与特定关键字匹配的文件,然后将其删除。到目前为止我有这个:

find . -iregex '.*.new.*' -regex '.*.pdf*'
Run Code Online (Sandbox Code Playgroud)

然后我如何将此命令的结果通过管道传输到删除命令(例如rm

ImH*_*ere 10

一种方法是展开文件列表并将其作为参数提供给 rm:

$ rm $(find . -iregex '.*.new.*' -regex '.*.pdf*')
Run Code Online (Sandbox Code Playgroud)

**如果文件名包含空格或新行,则会失败。

您可以使用 xargs 来构建 rm 命令,如下所示:

$ find . … … | xargs rm
Run Code Online (Sandbox Code Playgroud)

** 换行或空格也会失败

或者更好,要求find执行命令 rm:

$ find . … … --exec rm {} \;
Run Code Online (Sandbox Code Playgroud)

但是最好的解决办法是直接在find中使用delete选项:

$ find . -iregex '.*.new.*' -regex '.*.pdf*' -delete
Run Code Online (Sandbox Code Playgroud)