如果其中一个文件包含所需数据,如何打印目录中所有文件的内容.....使用bash? 我尝试递归使用'grep',但它只打印单个文件的内容!该怎么办 ? 例如, 如果我有两个目录abc和xyz.abc有一个文件f1.txt(“这是File1。”)和f2.txt(“这是File2。”)。xyz有一个文件x.txt(“假f1”)和y.txt(“假f2”)。 现在如果我grep for File1,那么输出应该是: 这是File1。 这是File2。
答案 0 :(得分:1)
试试这个:
find . -type f -exec bash -c 'grep -q "required data" "$1" && cat "$1"' -- {} \;
.
当前目录-type f
:仅文件 -exec
:执行bash
从{}
开始接受$ 1参数,并使用布尔逻辑执行某些操作:true condition && cat file
,if condition; then action; fi
--
选项安全结束{}
当前文件占位符答案 1 :(得分:0)
如果该目录中的任何文件包含所需数据,则以下bash脚本将打印目录中所有文件的内容:
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
将search string
替换为您要搜索的字符串。您可以直接在命令行上运行它,也可以将其放在bash脚本中然后运行它。
<强>解释强>