技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

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

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