我想在 perl 中从目录中搜索特定文件

我想在 perl 中从目录中搜索特定文件

需要文件模式搜索(在 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

答案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

相关内容