带有打印修改的 Bash 搜索



如果一个目录的文件包含所需的数据,如何打印目录的所有文件的内容.....使用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 fileif 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 脚本中然后运行它。

解释:

  1. 使用"查找"获取所有目录。
  2. 对于上面找到的每个目录,仅"查找"该目录中的所有文件。
  3. 对于上面找到的每个文件,如果该文件包含所需的内容,请打印该目录中所有文件的内容并退出该目录。
  4. 如果没有文件包含所需内容,则不执行任何操作。

最新更新