Eu quero pesquisar arquivos específicos do diretório em perl [closed]

-2

Precisa de pesquisa de padrão de arquivo (em perl), algo como $fileName =~ / / . Exemplos de nomes de arquivos específicos:

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
    
por Sonal 29.03.2017 / 01:58

1 resposta

1

O que você quer é o módulo File::Find . A função find() do módulo atravessa a árvore de diretórios e executa uma sub-rotina específica definida dentro dessa função (embora isso possa ser definido externamente).

Abaixo está um exemplo de uso. Aqui encontramos todos os arquivos e os colocamos em array, para que você possa depois iterar sobre cada item da matriz e fazer algo com ele; é necessário, pois find() não gosta quando você tenta alterar um arquivo durante a travessia da árvore de diretórios. Adapte o script conforme necessário

#!/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"
}

Execução de teste:

$ 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
    
por Sergiy Kolodyazhnyy 29.03.2017 / 03:10