ディレクトリ構成図ツクール
ls -aFRの結果を加工してこんな感じの図を生成します。スクリプトの文字コードはEUCで。090406追記。文字コードは環境に合わせてくださいませ。会社サーバーだとutf-8で文字化けなくいけました。091225追記。ls -aFR→ls -atFRに変更。更新順でソート。
├ contrib/ │ ├ README* │ └ packaging/ │ └ Fedora/ │ ├ phpMyAdmin-http.conf* │ └ phpMyAdmin.spec*
#!/usr/local/bin/perl use strict; my($tab,@DATA,@pre,@now,@DATA_); if(@ARGV < 1){ print"usage:$0 [dirname]\n"; exit; } my $path = shift @ARGV; if(!-d($path)){ print"error:'$path' is not exist.\n"; exit; } my @data = `ls -atFR $path`; my $root_dirname = `cd $path;pwd`; $root_dirname =~s/\r|\n//g; foreach(@data){ $_ =~s/\r|\n//g; next if $_ eq './' || $_ eq '../'; my $line = $_; if($line =~/^\Q$path\E/){ $line =~s/^\Q$path\E//g; $line =~s/^\///; my @datas = split/\//,$line; my $num = @datas; my $dirname = pop @datas; $num = 0 if $dirname eq ':'; $dirname = "$root_dirname/" if $dirname eq ':'; $dirname =~s/:$/\//; $tab = "│\t" x $num; push @DATA,"$tab├\t$dirname\n"; }else{ next if $line =~/\/$/ || $line eq ''; push @DATA,"$tab│\t├\t$line\n"; } } foreach(reverse @DATA){ $_ =~s/\r|\n//g; @now = split"\t",$_; foreach my $num (0..$#now){ if($pre[$num] !~/│|├|└/){ $now[$num] =~s/│// ; $now[$num] =~s/├/└/ ; } } @pre = @now; my $buf = join"\t",@now; push @DATA_,"$buf\n"; } print reverse @DATA_; exit;