« mod_perl について知りたい | メイン | [Perl]ディレクトリを再帰的にたどりファイル一覧を取得したい その1 »

カテゴリー:ディレクトリ コマンド 

[Linux]ディレクトリを再帰的にたどりファイル一覧を取得したい

特定のディレクトリ配下を再帰的にたどりファイル一覧を表示などしたい。

階層の深さが決まっていればかんたんに取得できる方法もあるが、階層はまちまちで、今後もダイナミックに変化していく。このような場合にはどうすれば良いだろうか。


方法はいくつかある。

  1. Linuxなどのコマンドを使う
  2. オリジナルの関数を用意する
  3. File::Findモジュールを使用する

○Linuxなどのコマンドを使う

表示するだけであれば、お手軽なのは ls のオプションを利用する方法である。Rオプションをつけて実行すると、ディレクトリがあった場合、そのディレクトリ以下のファイルも再帰的に表示してくれる。

以下の実行例では2階層までしかないが、最後まで面倒を見てくれる。その他のオプションと同時に利用することももちろん可能だ。 "ls -laR" などとすれば、期待通りの結果が得られる。

$ ls -R
.:
200602 200603

./200602:
access_log.20060215.gz access_log.20060222 error_log.20060215.gz error_log.20060222.gz
access_log.20060216 access_log.20060223 error_log.20060216.gz error_log.20060223.gz

./200603:
access_log.20060301 access_log.20060312 error_log.20060301.gz error_log.20060312.gz
access_log.20060302 access_log.20060313 error_log.20060302.gz error_log.20060313.gz


上記の実行例だと、実行結果がプログラムなどから再利用しづらい。そういった時には "-1" オプションを利用する。

$ ls -1R
.:
200602
200603

./200602:
access_log.20060215.gz
access_log.20060216
access_log.20060222
access_log.20060223
error_log.20060215.gz
error_log.20060216.gz
error_log.20060222.gz
error_log.20060223.gz

./200603:
access_log.20060301
access_log.20060302
access_log.20060312
access_log.20060313
error_log.20060301.gz
error_log.20060302.gz
error_log.20060312.gz
error_log.20060313.gz


これ以外にもfindを利用する方法もあるが、findはOSによって利用方法(実装)が異なる。ここではLinuxで採用されているGNU Linuxのみしか確認していないので他OSを利用する場合は動作を確認してから利用されることをオススメする。

$ find .
.
./200603
./200603/error_log.20060301.gz
./200603/error_log.20060302.gz
./200603/error_log.20060312.gz
./200603/error_log.20060313.gz
./200603/access_log.20060301
./200603/access_log.20060302
./200603/access_log.20060312
./200603/access_log.20060313
./200602
./200602/error_log.20060215.gz
./200602/error_log.20060216.gz
./200602/error_log.20060222.gz
./200602/error_log.20060223.gz
./200602/access_log.20060216
./200602/access_log.20060222
./200602/access_log.20060223
./200602/access_log.20060215.gz

findなので特定のパターンのファイル名の物のみを表示するなどの芸当が可能(というか本来の利用方法はそれだ(笑))





○関連
[Perl]ディレクトリを再帰的にたどりファイル一覧を取得したい その1
http://katsubemakito.net/cgiperl/2006/10/perl1.html

[Perl]ディレクトリを再帰的にたどりファイル一覧を取得したい その2
http://katsubemakito.net/cgiperl/2006/10/perl2.html



トラックバック

このエントリーのトラックバックURL:
http://katsubemakito.net/mt/mt-tb.cgi/329

この一覧は、次のエントリーを参照しています: [Linux]ディレクトリを再帰的にたどりファイル一覧を取得したい:

» [Perl]ディレクトリを再帰的にたどりファイル一覧を取得したい その1 from CGI(Perl)例文集
以下のエントリーの続き。 [Linux]ディレクトリを再帰的にたどりファイル一覧... [詳しくはこちら]

» [Perl]ディレクトリを再帰的にたどりファイル一覧を取得したい その2 from CGI(Perl)例文集
以下のエントリーの続き。 今回は、PerlのFile::Filndモジュールを利... [詳しくはこちら]

コメントを投稿

クリエイティブ・コモンズ・ライセンス
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.