1

我不是一个 perl/程序员,但我遇到了一些可以用 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);

谢谢!

4

2 回答 2

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");

于 2013-08-19T13:17:21.620 回答
0

我建议使用File::Find::Rule

use File::Find::Rule;

my @files = File::Find::Rule->file()->name('*.xml')->in($seach_dir);
于 2013-08-19T13:47:19.143 回答