ディレクトリ・ファイル一覧の取得方法 | 中目黒webデザインとランチブログ

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

中目黒webデザインとランチブログ

絶滅の危機にひんしているという陸上動物最速のチーター。ダーウィンでも特集されていましたが、これがやっぱり面白いんです。まず、誰もが想像するチーターはメスということ。
オスのチーターは兄弟で群れを作るのですが、狙いのは草食動物の赤ちゃんがメイン。大人の草食動物はほとんど狙いません。そのため、本気で走ることはほとんどないとか。
メスのメスのチーターは子供を含めた大家族を養うために、大きな草食動物も狙う必要があります。そのため、最高速度120キロで狩りをするんですね。なるほど。

ジュンです、今日も引き続き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";


glob()ドキュメント
http://perldoc.perl.org/functions/glob.html

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



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


# ディレクトリオープン
opendir(DIRHANDLE, "./");

# ディレクトリエントリの取得
foreach(readdir(DIRHANDLE)){
next if /^\.{1,2}$/; # '.'や'..'をスキップ

print "$_\n";
}

# ディレクトリクローズ
closedir(DIRHANDLE);


参考
opendir()ドキュメント
http://www.rfs.jp/sb/perl/05/opendir.html