我需要处理的目录中有数千个文本文件。 同样命名,但有一些变化:
/home/dir/abc123.name.efg-joe_p000.20110124.csv
/home/dir/abc456.name.efg-jon_p000.20110124.csv
/home/dir/abc789.name.efg-bob_p000.20110124.csv
我有一个perl脚本,可以一次处理一个文件而没有问题:
./script.pl /home/dir/abc123.name.efg-joe_p000.20110124.csv
传递和处理许多这些文件的最佳方法是什么?我在为此寻找ARGV吗? 我应该将文件列在单独的文件中,然后将其用作输入吗?
答案 0 :(得分:4)
您可以传递文件模式,作为参数(glob格式),然后将其传递给glob
调用以列出文件;然后逐个处理它们。
./script.pl -file_pattern "/home/dir/abc123.name.efg-joe_p000.*.csv"
在你的剧本中
my @files = glob($file_pattern);
答案 1 :(得分:4)
如果“最佳”是指“没有代码更改”,而且正如您的路径名所示,您可以使用类似* NIX的系统,请尝试以下操作:
$ find /home/dir -type f -name \*.csv -exec ./script.pl {} \;
如果script.pl
可以处理多个文件名参数,您可以一次并行化,例如10个:
$ find /home/dir -type f -name \*.csv | xargs -n 10 ./script.pl
答案 2 :(得分:2)
您可以使用readdir
一次读取一个文件名:
opendir my $dh, $some_dir or die "can't opendir $some_dir: $!";
while (defined(my $file = readdir($dh))) {
next if $file =~ /^\./;
print $file;
}