指定したディレクトリ配下のファイル名やディレクトリ名を、再帰的に全て表示するperlスクリプト printAllUnderDir.pl を作成した。
use strict; use warnings; my $dir = $ARGV[0]; if(! -d $dir) { die "Invalid argument."; } $dir =~ s|\\|/|g; getFileList($dir); sub getFileList { my $dir = shift; print("$dir\n"); opendir(my $dh, $dir); my @fileList = readdir($dh); closedir($dh); foreach my $file (sort @fileList) { if($file =~ /^\.{1,2}$/){ next; } if( -d "$dir/$file") { getFileList("$dir/$file"); } else { print("$dir/$file\n"); } } }
ディレクトリをどんどん下まで潜っていく必要があるので、再帰処理を使っている。(getFileListの中でgetFileListを呼んでいる。)
なお、
$dir =~ s|\\|/|g;
となっているのは、結果の出力の際にディレクトリ・ファイルの区切り文字を「/」で統一するため。これがないと、Windows環境において、表示結果が「C:\test\perl/dir/test.txt」みたいな感じで「\」と「/」が入り混じり、少し見にくくなってしまう。