2008-05-29
カレントディレクトリのファイル一覧を取得する - glob関数
use strict; use warnings; ### カレントディレクトリのファイル一覧を取得する。 # glob print "1: カレントディレクトリのファイル一覧を取得する。\n"; my @all_files = glob "*"; # * は、. で始まらないすべてのファイルを表現 print join( "\n", @all_files ), "\n\n"; print "2: .txt で終わるファイル一覧を取得する。\n" ; my @text_files = glob "*.txt"; print join( "\n", @text_files ), "\n\n"; print "3: .txt と .pl で終わるファイル一覧を取得する。\n"; my @text_and_pl_files = glob "*.txt *.pl"; # 複数パターンある場合は空白で区切る print join( "\n", @text_and_pl_files ), "\n\n"; print "4: 通常ファイルの一覧を取得する。\n"; my @normal_files = glob "*"; @normal_files = grep{ -f $_ } @normal_files; # 複雑なことをしたいときは,"*" で # すべてのファイルを取得してから、 # grep で選別する。 print join( "\n", @normal_files ), "\n\n"; __END__
ファイル一覧を取得する。
my @all_files = glob "*";
- ファイル一覧を取得するには、glob 演算子を使います。
- 対象は、カレントディレクトリのファイル(ディレクトリを含む)になります。
- 別のディレクトリのファイル一覧を取得したときは、 chdir で、カレントディレクトリを移動するか、相対パスあるいは、絶対パスで、表現します。( 下の例で説明 )
glob の引数の表現例
"*" | .で始まらない、すべてのファイル |
"*.txt" | .txt で終わるファイル |
"*.txt *.pl | .txt あるいは、 .pl で終わるファイル( .txt と .pl の間に空白があります ) |
"* .*" | すべてのファイル( * と .* の間に空白があります ) |
"lib/* | libディレクトリ以下のファイル |
c:/dir/* | 絶対パスで指定 |
- 空白で、区切ると複数のパターンを指定できます。
- 相対パス以外にも、絶対パスも使うことができます。
- * は、Unixのシェルで用いられるワイルドカードのひとつです。glob関数は、シェルのワイルドカード展開の規則にしたがって、*を含むファイル名を展開します。
glob ドキュメント
トラックバック - http://d.hatena.ne.jp/perlcodesample/20080529/1212075850