根据程序从 unix find 命令中排除/包含文件

根据程序从 unix find 命令中排除/包含文件

我想知道是否有任何方法可以根据另一个程序的输出或退出代码在 find(1) 的结果中包含或排除文件。具体来说,我希望能够运行 find(1),以便它仅返回那些包含正则表达式正则匹配项的文件。

我意识到这可以通过 egrep 管道传输 find(1) 的输出来实现,但我希望能够在 find(1) 内部完成所有操作。

例如,有没有办法将以下内容转换为不使用任何管道的 find(1) 单次调用?

find . [test] | xargs egrep -l [regex]

答案1

-exec如果命令返回零(成功),则计算结果为“true”:

find . -type f -exec egrep -qs "regex" {} \; -print

-print用您选择的动作替换。


然而,考虑到这种方式egrep只执行一次每个文件。 比较:

平等〜/代码$时间找到-类型f-exec grep-qs bin/env {} \; -print | wc -l
60

实际 0分0.760秒
用户 0分0.104秒
系统 0分0.596秒

对阵

相等〜/代码$时间查找-type f -print0 | xargs -0 egrep -l bin / env | wc -l
60

实际 0分0.021秒
用户 0分0.003秒
系统 0分0.023秒

(在一个相当小的 Git 存储库上测试,300 个文件,约 2.6 MB。)

相关内容