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

Bro*_*olf 2 unix directory bash perl traversal

我有兴趣进入bash脚本,并想知道如何遍历unix目录并记录当前正在查看的文件的路径,如果它符合正则表达式标准.

它会是这样的:

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

Bash或Perl脚本很好,虽然我更喜欢你如何使用带有grep,awk等命令的bash脚本来实现这一点.

小智 8

find . -type f -print0 | xargs -0 grep -l -E 'some_regexp' > /tmp/list.of.files
Run Code Online (Sandbox Code Playgroud)

重要部分:

  • -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
Run Code Online (Sandbox Code Playgroud)

这将以5个单独的副本运行grep命令,每个副本扫描另一组最多100个文件


Xet*_*ius 5

使用find和grep

find . -exec grep -l -e 'myregex' {} \; >> outfile.txt
Run Code Online (Sandbox Code Playgroud)

-l 在grep上只获取文件名

-e 在grep上指定一个正则表达式

{} 将find命令找到的每个文件放在grep命令的末尾

>> outfile.txt 附加到文本文件