我非常熟悉将 find 与 -exec 结合使用,事实上,它已成为我个人最喜欢的 BASH 命令之一,因为它在视觉上看起来很酷,而且功能强大且有用。
我需要找到 VPS 上某些文件中包含的字符串,目录结构太大了,我无法手动浏览并查找包含该字符串的文件,所以我认为 find -exec grep 是一个完美的工作.
我的命令的完整语法如下:
find ./ -type f -name "*.*" -exec grep "section for more information." {} \;
...这对于确认该字符串确实在某些文件中找到非常有用...但是哪些文件呢?我很想知道是否有一种语法可以显示 which 文件包含该字符串,最好是包含它们的完整路径,尽管我猜这不是强制性的。
提前致谢!
POSIX
grep
才会输出文件名。因此,典型的技巧是添加 /dev/null
以确保始终大于 1:
find ./ -type f -name "*.*" -exec grep "for more information." /dev/null {} \;
GNU 和 BusyBox
grep
另外还有一个 -H
您可以使用:
-H, --with-filename
Print the file name for each match. This is the default
when there is more than one file to search.
或者,如果您不关心匹配的行本身而只想要文件名:
find ./ -type f -name "*.*" -exec grep -q "for more information." {} \; -print
不知道为什么接受上面的答案,因为它似乎没有解决你原来的问题,但这实际上是有效的。
find . -type f | while read f;do grep -q "for more information." "$f" && echo "$f" || true;done