我对进入bash脚本感兴趣,并希望知道如何遍历unix目录并将路径记录到当前正在查看的文件中,如果它符合正则表达式条件的话。如何使用bash或Perl脚本遍历目录树?
它会是这样的:
- 穿越大型UNIX目录路径的文件/文件夹结构。
- 如果当前文件的内容包含匹配的一个或多个正则表达式,
- 然后将文件的完整路径追加到一个结果的文本文件的字符串。
bash或Perl脚本都很好,但我更希望你将如何与grep的,AWK等命令做到这一点使用bash脚本。
我对进入bash脚本感兴趣,并希望知道如何遍历unix目录并将路径记录到当前正在查看的文件中,如果它符合正则表达式条件的话。如何使用bash或Perl脚本遍历目录树?
它会是这样的:
bash或Perl脚本都很好,但我更希望你将如何与grep的,AWK等命令做到这一点使用bash脚本。
使用发现和grep
find . -exec grep -l -e 'myregex' {} \; >> outfile.txt
-l
上的grep得到的grep的只是文件名
-e
指定一个正则表达式
{}
地方的每个文件通过在find命令找到grep命令的末尾
>> outfile.txt
追加到文本文件
grep -l -R <regex> <location>
应该做的工作。
-R在某些版本的Unix上给了我以前的问题。如果它适用于@Brock Woolf那么很好,否则,他将需要使用find和grep – Xetius 2009-07-09 09:52:43
find . -type f -print0 | xargs -0 grep -l -E 'some_regexp' > /tmp/list.of.files
重要部分:
使用xargs的很酷的事情是,如果你的目录中确实包含了很多文件,可以加速通过并联它的进程:
find . -type f -print0 | xargs -0 -P 5 -L 100 grep -l -E 'some_regexp' > /tmp/list.of.files
这将在5级不同的副本运行grep命令,每个扫描另一套超过100个文件
find /path -type f -name "*.txt" | awk '
{
while((getline line<$0)>0){
if(line ~ /pattern/){
print $0":"line
#do some other things here
}
}
}'
类似thread
find /path -type f -name "outfile.txt" | awk '
{
while((getline line<$0)>0){
if(line ~ /pattern/){
print $0":"line
}
}
}'
如果你想要做THI期从Perl中,你可以采取find
命令,人们建议,并把它们变成一个Perl脚本find2perl
:
如果您有:
$ find ...
做出
$ find2perl ...
输出一个执行相同事情的Perl程序。从那里,如果你需要在Perl中做一些简单的事情,但是很难实现,你只需要扩展Perl程序。
-exec grep会比较慢,因为它会分别为每个文件运行grep – 2009-07-09 10:12:24
您可以用加号显着提高速度:find。 -exec grep -l -e'myregex'{} + >> outfile.txt – 2009-07-10 18:27:09