- 締切済み
perl ディレクトリ ツリー表示
下記ソースコードでカレントディレクトリのツリー表示ができますが、これを特定のディレクトリ内をツリー表示できるようにする方法がわかりません。 opendir関数の$dirの前にtestをつけましたが、うまく行きません。 特定のディレクトリは任意で変えることができることとします。 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('.');
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- _kappe_
- ベストアンサー率68% (1581/2304)
>サブルーチン内のprint文を$sftp->chmodコマンドに変えました。 それだけでは動かないのは明らかです。opendirやreaddirではSFTPサーバー上のファイルの一覧を取得できませんし、if -dでディレクトリの判定もできないからです。 $sftp->die_on_errorを使って、どこの処理で失敗しているかを調べてください。
- _kappe_
- ベストアンサー率68% (1581/2304)
一番最後の行の'.'がカレントディレクトリの指定なので、この部分を書き換えればお好みのディレクトリのツリー表示ができるようになります。
補足
ありがとうございます。 これを更に、Net::SFTP::Foreignの「$sftp->chmod」のコマンドを使って特定ディレクトリ配下を一括でアクセス権を変更して、試行錯誤しましたが、動きませんでした。 サブルーチン内のprint文を$sftp->chmodコマンドに変えました。 結果、ページが真っ白で処理ができず。なにが間違っていたのでしょうか? $sftp->chmod("" x $lv, "$dir/$file", 任意の数値); こんな感じでやりましたが、ダメでした。