如何根据文件扩展名过滤文件名?

时间:2009-02-16 06:36:35

标签: perl list filter

以下脚本存储数组@file_list中的所有文件和目录。

如何仅过滤.lt6扩展名为{1}}的文件?

opendir (CURRDIR, $localdir);
@file_list = grep !/^\.\.?$/, readdir CURRDIR;
print STDOUT "Found Files: @file_list\n";

欢呼声

7 个答案:

答案 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