以下脚本存储数组@file_list
中的所有文件和目录。
如何仅过滤.lt6
扩展名为{1}}的文件?
opendir (CURRDIR, $localdir);
@file_list = grep !/^\.\.?$/, readdir CURRDIR;
print STDOUT "Found Files: @file_list\n";
欢呼声
答案 0 :(得分:9)
试试这个:
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";
}
答案 1 :(得分:3)
不要忘记closedir()
。
您的grep
应该寻找:
my(@file_list) = grep /\.lt6$/, readdir CURRDIR;
假设您的其余语法大致正确。
答案 2 :(得分:2)
您可以使用File::Find::Rule;
use File::Find::Rule;
print "FOUND:\n "
, join( "\n "
, File::Find::Rule->file->name( '*.lt6' )->in( $path )
)
, "\n"
;
答案 3 :(得分:2)
my @file_list = glob "$localdir/*.lt6";
答案 4 :(得分:1)
opendir (CURRDIR, $localdir);
@file_list = grep m/\.lt6$/, readdir CURRDIR;
closedir CURRDIR;
print STDOUT "Found Files: @file_list\n";
答案 5 :(得分:0)
要添加一些变化,你也可以做这样的事情:
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;
等等。
答案 6 :(得分:-1)
转到命令提示符
cd \
dir / s * .lt6> mydir.txt