要在子目录中查找所有扩展名为.out
的文件路径,我使用
find . -name '*.out'
要在所有以.out
结尾的文件中使用模式,请使用
grep pattern *.out
如何结合这两个命令,以便找到所有文件,然后抓取这些文件?
我正在寻找一种优雅的替代品
grep -r 'pattern' . | grep '.out'
答案 0 :(得分:3)
如果您的Shell是Bash 4+版本,则可以使用globstar
:
shopt -s globstar
grep pattern **/*.out
来自Bash manual:
globstar
如果设置,则在文件名扩展上下文中使用的模式“ **”将 匹配所有文件以及零个或多个目录和子目录。如果 模式后跟一个“ /”,仅目录和子目录 匹配。
答案 1 :(得分:1)
find
允许您使用-exec
选项在找到的每个文件上运行程序:
find -name '*.out' -exec grep -H pattern {} \;
{}
指示文件名,;
告诉find
,这是grep
参数的结尾。 -H
告诉grep
始终打印文件名,通常仅在有多个文件要处理时才会这样做。