Запустить perl скрипт для файлов в нескольких каталогах - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть несколько файлов (с одним и тем же именем) в разных подкаталогах. Я хотел бы запустить сценарий 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
...

Я хочу Запустите мой скрипт perl для каждого файла data.dat из каталога Results. Примечание: я использую Ma c и хотел бы запустить скрипт из терминала. Прямо сейчас для каждого файла я использую perl myscript.pl *.dat для каждой папки.

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Одно из решений - bash сделает всю работу за вас.

for i in $(find /Users/.../Documents/Results -name data.dat); do (cd $(dirname $i); perl myscript.pl data.dat); done
0 голосов
/ 03 апреля 2020

Вы можете использовать комбинацию потоков и 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
}

Это запускает отдельную цепочку для каждого файла data.dat, найденного глобусом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...