在Perl中是否有一個列出目錄中所有文件和目錄的函數? 我記得Java有File.list()
這麼做嗎? Perl中是否有類似的方法?如何使用Perl列出目錄中的所有文件?
回答
如果你想獲得給定目錄的內容,只有它(即無子目錄),最好的辦法是使用執行opendir/readdir的/ closedir:
opendir my $dir, "/some/path" or die "Cannot open directory: $!";
my @files = readdir $dir;
closedir $dir;
您還可以使用:
my @files = glob($dir . '/*');
但在我看來,它也沒有那麼好 - 主要是因爲水珠是相當複雜的東西(可以自動過濾結果),並用它來獲取目錄中的所有元素似乎太簡單的任務。
在另一方面,如果你需要從所有的目錄和子目錄的獲取內容,基本上一個標準溶液:
use File::Find;
my @content;
find(\&wanted, '/some/path');
do_something_with(@content);
exit;
sub wanted {
push @content, $File::Find::name;
return;
}
這應該這樣做。
my $dir = "bla/bla/upload";
opendir DIR,$dir;
my @dir = readdir(DIR);
close DIR;
foreach(@dir){
if (-f $dir . "/" . $_){
print $_," : file\n";
}elsif(-d $dir . "/" . $_){
print $_," : folder\n";
}else{
print $_," : other\n";
}
}
您應該檢查執行opendir失敗(執行opendir ...還是死亡「的錯誤信息:$!「)。另外,我錯過了什麼?什麼是Win32 :: GUI :: DoEvents()在這裏做? (我沒有看到這個問題相關的任何事情。) – Telemachus 2009-06-25 21:33:54
這是我不希望或希望記住的東西經常expresions,應該是很容易做到的,我會用它來創建一個像列表中的函數($目錄的最佳方式,「F」);對於目錄文件「d」,感謝發佈這個 – Geomorillo 2014-03-03 06:41:39
readdir()會這樣做。
檢查http://perldoc.perl.org/functions/readdir.html
opendir(DIR, $some_dir) || die "can't opendir $some_dir: $!";
@dots = grep { /^\./ && -f "$some_dir/$_" } readdir(DIR);
closedir DIR;
use File::Find;
finddepth(\&wanted, '/some/path/to/dir');
sub wanted { print };
它會經過子目錄,如果它們存在。
這將列出一切(包括子目錄)從目錄中你按順序和屬性指定。我花了好幾天的時間尋找某件事來做這件事,並且我從這整個討論中拿出了一些部分,並且把它們放在一起。請享用!!
#!/usr/bin/perl --
print qq~Content-type: text/html\n\n~;
print qq~<font face="arial" size="2">~;
use File::Find;
# find(\&wanted_tom, '/home/thomas/public_html'); # if you want just one website, uncomment this, and comment out the next line
find(\&wanted_tom, '/home');
exit;
sub wanted_tom {
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat ($_);
$mode = (stat($_))[2];
$mode = substr(sprintf("%03lo", $mode), -3);
if (-d $File::Find::name) {
print "<br><b>--DIR $File::Find::name --ATTR:$mode</b><br>";
} else {
print "$File::Find::name --ATTR:$mode<br>";
}
return;
}
如果你是像我這樣的懶人,你可能會喜歡使用File::Slurp模塊。該read_dir函數將讀取目錄內容到一個數組,消除了點,如果需要前綴的文件與目錄的絕對路徑
返回my @paths = read_dir('/path/to/dir', prefix => 1) ;
- 1. 列出目錄中的所有文件
- 2. 列出目錄+子目錄中的所有文件和目錄
- 3. 如何列出marklogic目錄中所有文檔的所有URI
- 4. 使用Zend Framework列出S3目錄中的所有文件
- 5. 使用Spark列出Hadoop HDFS目錄中的所有文件?
- 6. 使用Dot Net Zip列出目錄中的所有文件?
- 7. 使用nio.file.DirectoryStream遞歸列出目錄中的所有文件;
- 8. 在目錄中列出同一目錄中的所有文件使用visual C++
- 9. 如何列出資源目錄中的所有文件
- 10. 如何列出當前目錄中的所有.txt文件?
- 11. 如何列出目錄中的所有文件Silverlight
- 12. Cocos2d-x如何列出資源目錄中的所有文件
- 13. 如何列出指定目錄中的所有zip文件?
- 14. 如何列出目錄中的所有文件
- 15. 如何列出自定義目錄中的所有文件
- 16. 如何列出ftp目錄中的所有文件夾?
- 17. 閱讀Perl中一系列子目錄中的所有文件
- 18. 列出目錄中的文件和所有子目錄
- 19. 列出目錄和子目錄中的所有jpg文件
- 20. 列出目錄中的所有文件和子目錄C#
- 21. 列出目錄中的所有子目錄和文件
- 22. 列出目錄中的所有子目錄和文件
- 23. 如何使用Perl從目錄中的所有文件中提取模式?
- 24. 如何使用Perl獲取目錄中純文件的列表?
- 25. 如何列出批處理文件中當前目錄的所有父目錄
- 26. 如何在php中列出目錄及其子目錄的所有文件?
- 27. 如何使用C++列出Windows目錄中的所有CSV文件?
- 28. 如何使用rsync --list-only源來列出該目錄中的所有文件?
- 29. 使用Perl來統計文件或目錄中所有文件中所有單詞的出現
- 30. 如何列出所有不包含給定文件的目錄?
我總是忘記readdir只是返回一個相對文件名列表,而不是整個路徑! – 2014-08-04 07:15:07