perl - 如何使用 bash 或 Perl 脚本遍历目录树?

标签 perl bash unix directory traversal

我对 bash 脚本很感兴趣,想知道如何遍历 unix 目录并记录当前正在查看的文件的路径(如果它符合正则表达式条件)。

它会是这样的:

  • 遍历大型 unix 目录路径文件/文件夹结构。
  • 如果当前文件的内容包含匹配一个或多个正则表达式的字符串,
  • 然后将文件的完整路径附加到结果文本文件。

Bash 或 Perl 脚本都可以,但我更喜欢使用带有 grepawk 等命令的 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/

相关文章:

linux - 从模式的出现开始读取文件的行

linux - 使用 linux 终端执行 sublime 时遇到问题

perl - 如何从特定目录中获取具有特定扩展名的所有文件的列表?

regex - 如何从动态创建的 URL 中删除点

php - 该程序无法启动,因为在我的计算机上启动 Apache 服务器时缺少 api-ms-win-crt-runtime-l1-1-0.dll

bash - bash 脚本如何在不使用 uudecode 的情况下写出二进制文件?

c - 在 C 中设置 open() 系统调用的权限

perl - 如何在 shell 脚本中处理 Perl 数组元素?

bash - 如何使用 GNU parallel 并行运行 curl 命令

bash - bash 中不区分大小写的字符串比较