我正在编写以下命令:
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
然后对这些行进行计数。