以下腳本將存儲數組@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