【发布时间】:2010-12-22 01:14:10
【问题描述】:
如何在目录列表中找到所有符合特定条件(-M,修改天数)的文件,而不是在其子目录中?
我想使用 File::Find,但看起来它也总是转到子目录。
【问题讨论】:
-
什么是“某些标准”?大小、权限、名称、日期等等?
-
@Manni: -M,修改天数
如何在目录列表中找到所有符合特定条件(-M,修改天数)的文件,而不是在其子目录中?
我想使用 File::Find,但看起来它也总是转到子目录。
【问题讨论】:
@files = grep { -f && (-M) < 5 } <$_/*> for @folders;
【讨论】:
将readdir 或File::Slurp::read_dir 与grep 结合使用。
#!/usr/bin/perl
use strict;
use warnings;
use File::Slurp;
use File::Spec::Functions qw( canonpath catfile );
my @dirs = (@ENV{qw(HOME TEMP)});
for my $dir ( @dirs ) {
print "'$dir'\n";
my @files = grep { 2 > -M and -f }
map { canonpath(catfile $dir, $_) } read_dir $dir;
print "$_\n" for @files;
}
【讨论】:
您可以在 'wanted' 函数中设置 File::Find::prune 以跳过目录树。添加类似 $File::Find::prune = 1 if( -d && $File::Find::name ne ".");
【讨论】: