【发布时间】:2010-10-07 20:01:59
【问题描述】:
以下脚本将所有文件和目录存储在数组@file_list中。
我如何只过滤带有.lt6 扩展名的文件,仅此而已?
opendir (CURRDIR, $localdir);
@file_list = grep !/^\.\.?$/, readdir CURRDIR;
print STDOUT "Found Files: @file_list\n";
干杯
【问题讨论】:
以下脚本将所有文件和目录存储在数组@file_list中。
我如何只过滤带有.lt6 扩展名的文件,仅此而已?
opendir (CURRDIR, $localdir);
@file_list = grep !/^\.\.?$/, readdir CURRDIR;
print STDOUT "Found Files: @file_list\n";
干杯
【问题讨论】:
my @file_list = glob "$localdir/*.lt6";
【讨论】:
试试这个:
grep(/\.lt6$/i, readdir(CURRDIR))
我已经用过很多次了。它可以工作,尽管现在我更喜欢使用File::Next 来处理这类事情。
例子:
use File::Next;
my $iter = File::Next::files( { file_filter => sub { /\.lt6$/ } }, $localdir )
while ( defined ( my $file = $iter->() ) ) {
print $file, "\n";
}
【讨论】:
转到命令提示符
光盘\
dir /s *.lt6 > mydir.txt
【讨论】:
opendir (CURRDIR, $localdir);
@file_list = grep m/\.lt6$/, readdir CURRDIR;
closedir CURRDIR;
print STDOUT "Found Files: @file_list\n";
【讨论】:
你可以使用File::Find::Rule;
use File::Find::Rule;
print "FOUND:\n "
, join( "\n "
, File::Find::Rule->file->name( '*.lt6' )->in( $path )
)
, "\n"
;
【讨论】:
为了增加一点多样性,您还可以执行以下操作:
opendir(DIR, $path) || die qq([ERROR] Cannot opendir "$path" - $!\n);
my(@txt) = grep(m{\.txt$}, readdir DIR);
rewinddir DIR;
my(@lt6) = grep(m{\.lt6$}, readdir DIR);
rewinddir DIR;
my(@dirs) = grep(-d "$path/$_", readdir DIR);
closedir DIR;
等等。
【讨论】:
别忘了closedir()。
您的grep 应该寻找:
my(@file_list) = grep /\.lt6$/, readdir CURRDIR;
假设您的其余语法大致正确。
【讨论】: