【发布时间】:2019-01-27 20:53:12
【问题描述】:
要在子目录中查找所有带有.out 扩展名的文件路径,我使用
find . -name '*.out'
要在所有以.out 结尾的文件中查找模式,我使用
grep pattern *.out
如何组合这两个命令,以便找到所有文件,然后在这些文件中进行 greps?
我正在寻找一个优雅的替代品
grep -r 'pattern' . | grep '.out'
【问题讨论】:
要在子目录中查找所有带有.out 扩展名的文件路径,我使用
find . -name '*.out'
要在所有以.out 结尾的文件中查找模式,我使用
grep pattern *.out
如何组合这两个命令,以便找到所有文件,然后在这些文件中进行 greps?
我正在寻找一个优雅的替代品
grep -r 'pattern' . | grep '.out'
【问题讨论】:
如果您的 shell 是 Bash 版本 4+,您可以使用 globstar:
shopt -s globstar
grep pattern **/*.out
来自Bash manual:
全球之星
如果设置,文件名扩展上下文中使用的模式“**”将 匹配所有文件和零个或多个目录和子目录。如果 模式后跟一个“/”,只有目录和子目录 匹配。
【讨论】:
find 允许您使用-exec 选项在找到的每个文件上运行程序:
find -name '*.out' -exec grep -H pattern {} \;
{} 表示文件名,; 告诉find 这是grep 参数的结尾。 -H 告诉 grep 始终打印文件名,通常只有在有多个文件要处理时才会这样做。
【讨论】: