带打印修改的Bash搜索
如果某个目录文件包含所需数据,如何打印该目录所有文件的内容。。。。。使用bash? 我尝试递归地使用“grep”,但它只打印单个文件的内容!怎么办? 例如 如果我有两个目录abc和xyz.abc有一个文件f1.txt(“这是File1”)和f2.txt(“这是File2”)。xyz有一个文件x.txt(“假f1”)和y.txt(“假f2”)。 现在,如果我grep文件1,那么输出应该是: 这是文件1。 这是文件2。请尝试以下操作:带打印修改的Bash搜索,bash,grep,Bash,Grep,如果某个目录文件包含所需数据,如何打印该目录所有文件的内容。。。。。使用bash? 我尝试递归地使用“grep”,但它只打印单个文件的内容!怎么办? 例如 如果我有两个目录abc和xyz.abc有一个文件f1.txt(“这是File1”)和f2.txt(“这是File2”)。xyz有一个文件x.txt(“假f1”)和y.txt(“假f2”)。 现在,如果我grep文件1,那么输出应该是: 这是文件1。 这是文件2。请尝试以下操作: find . -type f -exec bash -c 'gr
find . -type f -exec bash -c 'grep -q "required data" "$1" && cat "$1"' -- {} \;
当前目录
:仅文件-类型f
:执行-exec
- 已执行:
从以下bash
中获取$1参数,并使用布尔逻辑执行一些操作:{}
,if条件的缩写版本;然后行动;fitrue条件和&cat文件
安全选项结束--
当前文件位置持有者{}
- \);查找的结束语法
find . -type d | while read dir; do find ${dir} -maxdepth 1 -type f | while read file; do if grep -q "search string" ${file}; then cat ${dir}/* 2>/dev/null; break; fi; done; done
将搜索字符串
替换为要搜索的字符串。您可以直接在命令行上运行它,也可以将其放入bash脚本中,然后运行它
说明:
你能解释一下上面命令的每一个术语是什么意思吗(您是否没有得到任何结果或得到的结果不正确?没有得到任何结果我假定您正在正确的目录层次结构中运行此脚本,其中包含预期的文件)是,您将用要搜索的字符串替换
search string
。如果要执行不区分大小写的搜索,请将-i
标志添加到grep
。此外,如果要包含符号链接文件,请将-L
标志作为两个find
s的第一个选项。我会这样做:bash-c'cat$(grep-L“pattern”$(find.-type f))”