我对 bash 脚本很感兴趣,想知道如何遍历 unix 目录并记录当前正在查看的文件的路径(如果它符合正则表达式条件)。
它会是这样的:
- 遍历大型 unix 目录路径文件/文件夹结构。
- 如果当前文件的内容包含匹配一个或多个正则表达式的字符串,
- 然后将文件的完整路径附加到结果文本文件。
Bash 或 Perl 脚本都可以,但我更喜欢使用带有 grep、awk 等命令的 bash 脚本来完成此操作。
最佳答案
find . -type f -print0 | xargs -0 grep -l -E 'some_regexp' > /tmp/list.of.files
重要部分:
- -type f 使查找列表只包含文件
- -print0 打印文件不是用\n 分隔,而是用\0 分隔——这是为了确保它能在文件名中包含空格的情况下正常工作
- xargs -0 - 在\0 上拆分输入,并将每个元素作为参数传递给您提供的命令(本例中为 grep)
使用 xargs 的好处在于,如果您的目录确实包含很多文件,您可以通过并行处理来加快处理速度:
find . -type f -print0 | xargs -0 -P 5 -L 100 grep -l -E 'some_regexp' > /tmp/list.of.files
这将在 5 个单独的副本中运行 grep 命令,每个副本扫描另一组最多 100 个文件
关于perl - 如何使用 bash 或 Perl 脚本遍历目录树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1102835/