- ベストアンサー
ディレクトリツリーの表示
Perlでtreeコマンドのような指定したディレクトリ以下の ディレクトリツリーを表示(取得)するモジュールなどはないでしょうか。 CPANから探してみたのですが英語の上に実行サンプルが載って いなかったりと該当するものかどうかの判断ができません。 名前や説明から該当しそうな(?)Perlモジュール ・Dir::Which ・File::CheckTree ・File:Find ・File::Path ・File::Searcher ・Tree::File など 因みに、環境非依存にしたいのでexecやバッククオートを使用したりは できません。
- みんなの回答 (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('.'); これでどうだ.
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
使ったことはないんですが, ちょっと 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); } という感じでも, それなりになんとかなるだろうし.
補足
どうもありがとうございます。 なんか上記のサンプルに所々、(記述の)誤りがあったようなので 修正して実行してみたのですがそれでもうまく動かないようです。 もう少し内容を調査して調べてみます。
お礼
お、動きました。 ありがとうございます。 あとは、自分で頑張ってみます。