我不是一个perl / programmer的交易,但我遇到了一些可以用perl脚本解决的问题。
我想搜索服务器自动输出的多个XML文件。该软件使用时间戳命名文件,这使得事先很难知道文件的名称,但我知道它们所在的文件夹。
如何让代码搜索文件夹中的每个文件并查找特定的字符串,例如* .xml?
这是我一直使用的代码,它需要一个文件名,字符串搜索功能可以工作:
#!/usr/bin/perl
use warnings;
use strict;
my $file;
for $file (@ARGV) {
# print "\n -----\n";
my $lines = slurp($file);
# print " File contains:\n$lines";
print "\n";
if ( $lines =~ /false/ ) {
print " Searched for string 'false' in @ARGV";
print "\n";
print " String found!\n";
}
else {
print " Searched for string 'false' in @ARGV";
print "\n";
print " No hit!\n";
}
}
sub slurp {
my ($file) = shift;
my ($f);
open( $f, "<", $file ) || die " Can't open file $file, quitting.\n";
my $scalar = do { local $/; <$f> };
return $scalar;
}
exit(0);
谢谢!
答案 0 :(得分:0)
使用您的目录作为脚本的第一个参数而不是文件列表,然后浏览目录:
...
opendir(DIR, $ARGV[0]) or die "cannot open directory $ARGV[0]: $!\n";
my @xmlfiles = grep(/\.xml$/,readdir(DIR));
closedir(DIR);
foreach (@xmlfiles) {
slurp($_);
...
}
...
如果它只是你想要的目录,你也可以使用glob
:
my @xmlfiles = glob("*.xml");
答案 1 :(得分:0)
我建议使用 File :: Find :: Rule :
use File::Find::Rule;
my @files = File::Find::Rule->file()->name('*.xml')->in($seach_dir);