ゆるゆるエンジニアの技術メモ

神奈川在住のITエンジニアの忘備録です。主にプログラミング(Perl, Java など)やネットワーク技術について、学んだことを自分の中で整理するために書いています。書いたことが誰かのご参考になれば幸いです。

指定したディレクトリ配下のファイル名やディレクトリ名を全て表示するスクリプト

指定したディレクトリ配下のファイル名やディレクトリ名を、再帰的に全て表示する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」みたいな感じで「\」と「/」が入り混じり、少し見にくくなってしまう。