为多个目录中的文件运行perl脚本

问题描述 投票:-1回答:2

我在不同的子目录中有多个文件(同名)。我想一次在所有这些文件上运行我的Perl脚本,而不必分别执行。

例如,我有以下文件路径:

/Users/.../Documents/Results/DataSet1/Parameter1/Parameter2/data.dat
/Users/.../Documents/Results/DataSet2/Parameter1/Parameter2/data.dat
/Users/.../Documents/Results/DataSet3/Parameter1/Parameter2/data.dat
/Users/.../Documents/Results/DataSet4/Parameter1/Parameter2/data.dat
...

我想在data.dat目录中的每个Results文件上运行我的Perl脚本。旁注:我使用的是Mac,想从终端运行脚本。现在,要单独处理每个文件,我对每个文件夹使用perl myscript.pl *.dat

macos perl terminal
2个回答
1
投票

一种解决方案是让bash为您完成工作。

for i in $(find /Users/.../Documents/Results -name data.dat); do (cd $(dirname $i); perl myscript.pl data.dat); done

0
投票

您可以将线程和glob与perl结合使用,如下所示:

use threads;

my $basepath = '/Users/.../Documents/Results';
my @files = glob qq("${basepath}/DataSet?/Parameter?/Parameter?/data.dat");

threads->create(\&processdata, $_) for @files;

sub processdata {
    my $file = shift;
    # do your processing here
}

这将为glob找到的每个data.dat文件启动一个不同的线程。

© www.soinside.com 2019 - 2024. All rights reserved.