• ベストアンサー

ディレクトリツリーの表示

Perlでtreeコマンドのような指定したディレクトリ以下の ディレクトリツリーを表示(取得)するモジュールなどはないでしょうか。 CPANから探してみたのですが英語の上に実行サンプルが載って いなかったりと該当するものかどうかの判断ができません。 名前や説明から該当しそうな(?)Perlモジュール ・Dir::Which ・File::CheckTree ・File:Find ・File::Path ・File::Searcher ・Tree::File など 因みに、環境非依存にしたいのでexecやバッククオートを使用したりは できません。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

確かにいっぱいおかしかったので修正: sub treelist_ { my ($dir, $lv) = @_; opendir my $dh, $dir; my @files = grep { $_ !~ /^\.\.?$/; } readdir $dh; closedir $dh; for my $file (@files) { print ">" x $lv, "$dir/$file\n"; treelist_("$dir/$file", $lv+1) if -d "$dir/$file"; } } sub tree { for my $dir (@_) { print "$dir\n"; treelist_($dir, 0); } } tree('.'); これでどうだ.

pick52
質問者

お礼

お、動きました。 ありがとうございます。 あとは、自分で頑張ってみます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

使ったことはないんですが, ちょっと CPAN をあさってみたら File::Find::Node あたりが使えそうな気もします. ま~, ぶっちゃけ言ってしまうと「努力と根性」だけでもなんとかなるんですが.... sub treelist_ { my ($dir, $lv) = @_; opendir my $dh, $dir; my @files = grep { $_ !~ /^\.\.?$/; } readdir $dh; closedir $dh; my $file (@files) { print ">" x $lv, "$file\n"; treelist_("$dir/$file", $lv+1) if -d "$dir/$file"); } } sub tree { for my $dir (@_) { print "$dir\n"; treelist_($dir, 0); } という感じでも, それなりになんとかなるだろうし.

pick52
質問者

補足

どうもありがとうございます。 なんか上記のサンプルに所々、(記述の)誤りがあったようなので 修正して実行してみたのですがそれでもうまく動かないようです。 もう少し内容を調査して調べてみます。

関連するQ&A