如果一个目录的文件包含所需的数据,如何打印目录的所有文件的内容.....使用bash?我尝试递归使用"grep",但它只打印单个文件的内容!怎么办?例如如果我有两个目录 abc 和 xyz.abc 有一个文件 f1.txt("This is File1."(和 f2.txt("This is File2."(。XYZ 有一个文件 x.txt("fake f1"(和 y.txt("fake f2"(。现在,如果我为 File1 进行 grep,则输出应该是:这是文件 1。这是文件 2。
试试这个:
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
的简短版本 -
--
期权结束安全性 -
{}
当前文件占位符 - \; 查找的结束语法
如果某个目录中的任何文件包含所需的数据,则以下 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 脚本中然后运行它。
解释:
- 使用"查找"获取所有目录。
- 对于上面找到的每个目录,仅"查找"该目录中的所有文件。
- 对于上面找到的每个文件,如果该文件包含所需的内容,请打印该目录中所有文件的内容并退出该目录。
- 如果没有文件包含所需内容,则不执行任何操作。