Perlテックラボ

ディレクトリ・ファイル一覧の取得方法

Perlで任意のディレクトリにあるファイル一覧を取得する際は、いくつかの方法があります。今回はglob()とopendir()で取得する方法をご紹介します。

glob()でファイルの一覧を取得

簡単なのはglob()を使ったファイルの取得方法です。
glog()は カレントディレクトリにあるファイル名やディレクトリ名を取得することができます。

# 引数にアスタリスク( * )を指定すると、. で始まらないすべてのファイル一覧を取得
my @file	= glob "*";
print join( "\t", @file ), "\n";
"* .*"	. で始まるファイルも対象にする場合は引数に"* .*"を指定
my @file2	= glob "* .*";
print join( "\t", @file2 ), "\n";

glob()の引数に拡張子を指定すると、指定した拡張子のファイル一覧のみを取得することができます。

my @file = glob "*.txt *.pl";
print join( "\t", @file ), "\n";

別ディレクトリのファイル一覧を取得したときは、 chdir()でカレントディレクトリを移動するか、相対パスあるいは、絶対パスで指定します。

/var/www/htmlの拡張子.htmlに該当するファイルのみを取得する
chdir("/var/www/html");
my @file	= glob "*.html";
print join( "\t", @file ), "\n";
参考

opendir()でファイルの一覧を取得

ファイルハンドルを扱いたい場合はopendir()が便利です。
opendir()で任意のディレクトリをオープンし、readdir()でファイル名やディレクトリ名を取得します。

# ディレクトリオープン
opendir(DIRHANDLE, "./");
# ディレクトリエントリの取得
foreach(readdir(DIRHANDLE)){
next if /^\.{1,2}$/;	# '.'や'..'をスキップ
print "$_\n";
}
# ディレクトリクローズ
closedir(DIRHANDLE);
参考

関連記事