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