以下脚本将存储数组@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";
欢呼
试试这个:
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";
}
不要忘记closedir()
。
你grep
应该寻找:
my(@file_list) = grep /\.lt6$/, readdir CURRDIR;
假设你的语法的其余部分是大致正确。
opendir (CURRDIR, $localdir);
@file_list = grep m/\.lt6$/, readdir CURRDIR;
closedir CURRDIR;
print STDOUT "Found Files: @file_list\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;
等。
您可以使用File::Find::Rule;
use File::Find::Rule;
print "FOUND:\n "
, join("\n "
, File::Find::Rule->file->name('*.lt6')->in($path)
)
, "\n"
;
my @file_list = glob "$localdir/*.lt6";
转到命令提示
CD \
DIR/S * .lt6> mydir.txt
相反类似答案 - 不区分大小写相较于未,和括号而不是括号。 :D – 2009-02-16 06:54:25
我们彼此在一分钟内回答。伟大的思想家都认为8D。虽然在这种情况下,我猜我是西部最快的枪! – 2009-02-16 07:00:47
是的 - 我应该知道在给出答案之前编辑问题:D – 2009-02-17 08:38:20