Как получить файлы определенных шаблонов имен? - PullRequest
0 голосов
/ 25 июня 2019

У меня есть фрагмент кода на Perl для grep для файлов с конкретными именами в каталоге.

push @{ $output{archives} }, grep {-f $_} "$output{dir}/result0.txt”, "$output{dir}/outcome.txt”;
say "@{ $output{archives} } \n";

Будет выполнен поиск файлов с именами result0.txt, outcome.txt в каталоге $output{dir}. Эти результаты будут помещены в массив $output{archives}.

Как я могу найти имена файлов шаблона outcome_0.txt, outcome_1.txt, outcome_2.txt и т. Д. И отправить их в массив.

Я пытался изменить "$output{dir}/outcome.txt” на "$output{dir}/outcome*.txt”, но это не дает никаких результатов.

1 Ответ

2 голосов
/ 25 июня 2019

Если вы хотите найти файлы, соответствующие outcome_*.txt, вы можете использовать функцию glob или <>:

push @{ $output{archives} }, grep {-f $_} <"$output{dir}/outcome_*.txt">;

или glob вместо <>:

push @{ $output{archives} }, grep {-f $_} glob "$output{dir}/outcome_*.txt";

или с использованием более конкретного регулярного выражения:

push @{ $output{archives} }, grep {(-f $_) && /outcome_\d+\.txt$/}  glob "$output{dir}/*";

From perldoc glob :

glob
В контексте списка возвращает (возможно, пустой) список расширений имени файла для значения EXPR, как это делает стандартная оболочка Unix / bin / csh.В скалярном контексте glob выполняет итерации по таким расширениям имен файлов, возвращая undef, когда список исчерпан.

См. perldoc glob и perldoc perlop для получения дополнительной информации.

...