find 命令统计包含某个字符串的目录中有多少个文件,而不计算子目录

find 命令统计包含某个字符串的目录中有多少个文件,而不计算子目录

我正在编写以下命令:

find . -mtime -1 -type f -exec grep -ln '20191122' {} \; | wc -l

这使我能够找到一天内修改的所有文件,其中包含字符串“20191122”,最后输出有多少个文件符合描述。

但是,我所在的目录中还有子目录,这些子目录也在一天之内更新,并且它们也被计入wc -l.

我认为使用-type f只会计算“文件”而不是目录。

任何人都可以看到错误或提供帮助吗?

谢谢。

答案1

是的,find ... -type f只会查找文件,但它会递归地向下查找进入子目录。

要仅将其应用于grep当前目录中的文件,还可以-maxdepth 1与 GNUfind命令一起使用。这将阻止find向下超过一级(即仅进入当前目录)。

如果您有时想在find实用程序未实现的 Unix 上执行相同操作-maxdepth,您可以考虑

find . ! -name . -prune -mtime -1 -type f -exec grep -ln '20191122' {} \;

这可以避免下降到除.使用-prune.

至于对文件进行计数,更安全的做法是grep仅用于检测文件中的模式,然后输出wc -l可以正确计数的内容。如果您的文件名中包含嵌入的换行符,wc -l则会错误计数。

例如:

find . ! -name . -prune -mtime -1 -type f -exec grep -q '20191122' {} \; -exec echo x \; | wc -l

x这将输出包含该字符串的每个文件的字符的单行,wc -l然后对这些行进行计数。

相关内容