perl - 处理许多类似命名的文本文件的最佳方式

时间:2011-02-18 21:44:19

标签: perl

我需要处理的目录中有数千个文本文件。 同样命名,但有一些变化:

/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吗? 我应该将文件列在单独的文件中,然后将其用作输入吗?

3 个答案:

答案 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;
}