Требуется поиск шаблона файла (на Perl), что-то вроде $ fileName = ~ / /
. Примеры конкретных имен файлов:
YYYY-MM-DD_AmdocsWebHourlyReport.csv.gz
YYYY-MM-DD_ComverseHourlyReport.csv.gz
YYYY-MM-DD_DailyShortCodeSummaryReport.csv.gz
YYYY-MM-DD_SS7Statistic sReport.csv.gz
То, что Вы хотите, File::Find
модуль. find()
функция от модуля пересекает данное дерево каталогов и выполняет определенную подпрограмму, определенную в той функции (хотя это могло быть определено снаружи).
Ниже пример использования. Здесь мы находим все файлы и продвигаем их в массив, так, чтобы можно было позже выполнить итерации по каждому объекту массива и сделать что-то с ним; это необходимо с тех пор find()
не любит его, когда Вы пытаетесь изменить файл во время обхода дерева каталогов. Адаптируйте сценарий по мере необходимости
#!/usr/bin/env perl
use strict;
use warnings;
use File::Find;
my @wanted_files;
# The wanted subroutine is enclosed into find(sub,dir) command
# but can be used outside as well
find(
sub{
-f $_ && $_ =~ /^\d{4}-\d{2}-\d{2}.*csv.gz/
&& push @wanted_files,$File::Find::name
}, "."
);
foreach(@wanted_files){
print "$_\n"
}
Тестовый прогон:
$ tree
.
├── 2017-03-01_AmdocsWebHourlyReport.csv.gz
├── 2017-03-01_ComverseHourlyReport.csv.gz
├── 2017-03-02_AmdocsWebHourlyReport.csv.gz
├── 2017-03-02_ComverseHourlyReport.csv.gz
├── find_files.pl
└── some_random_file.blah
0 directories, 6 files
$ ./find_files.pl
./2017-03-02_ComverseHourlyReport.csv.gz
./2017-03-01_ComverseHourlyReport.csv.gz
./2017-03-02_AmdocsWebHourlyReport.csv.gz
./2017-03-01_AmdocsWebHourlyReport.csv.gz