Я хочу найти определенные файлы из каталога в perl [closed]

Требуется поиск шаблона файла (на 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
-2
задан 28 March 2017 в 18:12

1 ответ

То, что Вы хотите, 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
1
ответ дан 3 November 2019 в 13:42

Другие вопросы по тегам:

Похожие вопросы: