我正在尋找一種方式在Perl中列出目錄的純文件。僅文件,無目錄。如何使用Perl獲取目錄中純文件的列表?
回答
您需要結合使用opendir
,readdir
和closedir
功能與-f
文件測試操作:
opendir(my $dh, $some_dir) || die $!;
while(my $f = readdir $dh) {
next unless (-f "$some_dir/$f");
print "$some_dir/$f\n";
}
closedir $dh;
您想要readdir
運算符。
例如:
#! /usr/bin/perl
use warnings;
use strict;
my $dir = "/tmp/foo";
opendir my $dh, $dir
or die "$0: opendir: $!";
while (defined(my $name = readdir $dh)) {
next unless -f "$dir/$name";
print "$name\n";
}
運行它:
$ ls -F /tmp/foo a b c d/ $ ./prog.pl b c a
正如你所看到的,在名字他們物理存儲在文件系統中的順序,這並不一定是出來排序。
要進入快速和骯髒的路線,你也可以使用水珠操作符如
print map { s!^.*/!!; "$_\n" }
grep !-d $_ =>
</tmp/foo/*>;
請注意,你必須從結果中刪除目錄,以及水珠符不返回名稱以點開頭的文件。
使用File::Find。這是一個核心模塊。
use File::Find;
find(\&wanted, @directories_to_search);
sub wanted
{
my $file = shift;
return unless (-f $file);
#process file
}
另一種方式列出目錄中的所有文件是使用read_dir
函數從CPAN模塊File::Slurp:
use strict;
use warnings;
use File::Slurp qw(read_dir);
my $dir = './';
my @files = grep { -f } read_dir($dir);
它執行執行opendir檢查你。請記住,它包含任何「隱藏」文件(以點開頭的文件)。這不會遞歸地列出指定目錄的子目錄中的文件。
File::Find::Rule從CPAN使這完全瑣碎:
use File::Find::Rule;
my @files = File::Find::Rule->file->in($directory);
這個發現在給定的目錄或任何子目錄中的所有文件。我推薦這是因爲極其靈活和簡單的結合。
這可以用來查找路徑中的所有文件: a/**/**/b/**/c.txt – yarian 2011-06-22 22:58:42
當然!你只需要添加一個name()調用到這個文件之後 - 但一定要使用Unix風格的通配符(單星號)。如果你想要:你可以在那裏使用正則表達式:name('。* something [A-Z]。* \。foo')。所以你可以在($ directory)中說File :: Find :: Rule-> file-> name('a/*/*/b/*/c.txt') - >來查找你的示例文件。 – 2011-06-23 20:42:43
- 1. 如何獲取JAR文件中目錄下的文件列表
- 2. 如何從Perl中的DOS中獲取目錄列表?
- 3. 如何在禁用目錄列表時獲取文件列表?
- 4. 如何從文檔目錄中獲取xml文件的列表
- 5. 如何在Python中獲取目錄中的文件名列表
- 6. 如何獲取shell腳本中目錄中的文件列表?
- 7. 如何使用Perl列出目錄中的所有文件?
- 8. 如何獲取lua目錄中的文件列表?
- 9. 如何獲取C++目錄中的文件列表?
- 10. 如何獲取目錄中的文件列表
- 11. 如何獲取os x目錄中的文件列表?
- 12. 如何獲取使用VB6的目錄中的所有文件名列表?
- 13. 如何從打開目錄列表的目錄中獲取文件?
- 14. 如何在java中獲取目錄url的文件/目錄列表?
- 15. 如何獲取Aix或Unix目錄中的非目錄文件列表?
- 16. 如何使用python獲取目錄中所有文件的列表。
- 17. 如何使用RSpec測試獲取目錄中的文件列表?
- 18. 如何使用java獲取SVN目錄中的文件夾列表
- 19. WinRT - 獲取文件和目錄列表
- 20. 文件協議獲取目錄列表
- 21. 獲取文件列表,無子目錄
- 22. 如何從linux內核目錄中獲取文件列表?
- 23. 如何_directly_從.JAR子目錄中獲取文件列表 - JAVA
- 24. 如何在從目錄/文件列表中打開文件後獲取以前的目錄列表?
- 25. 如何獲取我的FullText目錄中使用的StopWords列表?
- 26. 使用Perl獲取文件的祖父目錄
- 27. 獲取當前目錄中的文件夾/文件列表
- 28. 使用File :: Find :: Rule獲取Perl中的文件列表
- 29. 如何在Python中使用os.walk獲取特定文件或目錄列表?
- 30. 如何打開目錄並使用perl讀取該目錄內的文件
File :: Find在我看來是更一般的更好的答案。 – 2010-05-12 18:11:12
如果您不想對整個樹進行深度優先搜索,File :: Find不是您要查找的Droid。 – 2010-05-16 00:04:09