【发布时间】:2012-06-21 14:12:39
【问题描述】:
我正在尝试在 Perl 中编写一个在特定目录和所有子目录中搜索的脚本。这样做的目的是脚本必须读取目录中的所有文件和所有子目录以查找特定的文本字符串(我定义的任何字符串)。如果在文件中找到该字符串,则脚本会在新的文本文件中打印文件的路径和名称,并继续处理目录树中的所有文件。
我有类似的东西,但我不确定如何继续。我是 Perl 的初学者,对这方面的所有选项一无所知。
#!/usr/bin/perl
use strict;
use File::Find;
my $dir = 'C:\PATH\TO\DIR';
my $string = "defined";
find(\&printFile, $dir);
sub printFile {
my $element = $_;
open FILE, "+>>Results.txt";
if(-f $elemento && $elemento =~ /\.txt$/) {
my $boolean = 0;
open CFILE, $elemento;
while(<CFILE>) {
if ($string) {
print FILE "$File::Find::name\n";
}
close CFILE;
}
}
close FILE;
}
sleep(5);
【问题讨论】:
-
也许您更愿意使用
grep的众多实现之一,而不是自己滚动。 -
如上所述,你可以使用 Perl 的
grep()函数。同样根据经验,我建议您输出到 STDIN 而不是文件(只是print()它)。您可以使用>重定向将输出重定向到文件。这允许脚本具有更大的灵活性(例如将输出通过管道传输到另一个进程等...)。 -
我曾尝试使用 grep,但它并没有给我想要的结果,因为它没有向我显示包含的所有子目录。这就是我试图寻找另一种解决方案的原因。
-
@m0skit0:Perl 的
grep不会这样做:它过滤 Perl 列表而不是文件。而且你不能输出到STDIN:) -
好吧,我理解错了这个问题。我以为字符串在文件 name 中:P