我曾尝试删除曾经用数字命名的文件,但是我的代码中没有这样做。这里的$ output是我的目录位置。其中目录包含多个文件夹和子文件夹。
从那个文件夹和子文件夹中我想选择我的.ml文件。其中只列出了名为.ml文件的aplhabets。
如果文件名如下(ev4.html,ev8.html等,则应省略)。
因为这里的文件名随数字一起出现,所以我想排除曾经用数字命名的文件并打印例外输出。
这是我的代码:
use strict;
use warnings;
use File::Find::Rule;
my $output="/home/location/radio/datas";
my @files=File::Find::Rule->file()
->name('*.ml')
#->name(qr/\^ev\d+/)->prune->discard
->in($output);
for my $file(@files)
{
print "file:$file\n";
}
获得输出:
file:/dacr/dacr.ml
file:/DV/DV.ml
file:DV/ev4/ev4.ml
预期产出:
file:/dacr/dacr.ml
file:/DV/DV.ml
答案 0 :(得分:1)
您的尝试几乎是正确的,但您的正则表达式是错误的,prune
和discard
将删除所有文件,而不仅仅是正则表达式的文件。
my @files=File::Find::Rule->file()
->name('*.ml')
->name(qr/\^ev\d+/) # wrong regex
->prune->discard # throws away all files
->in($output);
获取包含任何数字的文件的正确正则表达式只是\d
。您说的是文字^
,字母ev
和任意数量的数字,至少一个。
要使File :: Find :: Rule获取以.ml
结尾的所有文件,而不是具有数字的文件,请使用not
。
my @files=File::Find::Rule->file()
->name('*.ml')
->not( File::Find::Rule->name(qr/\d/) )
->in($output);
这将获取所有.ml
个文件,并丢弃名称中包含任何数字的任何文件。