主要な機能:
その下の階層たちに多数のファイルを持つディレクトリに対して、その構造を把握するためにつかう。
与えられたディレトリの下のディレクトリ全てに対して、それらを木構造と見なす。最初に与えた
ディリクトリはその木構造のルート(根)と見なす。探索したディレクトリをその木構造のノード(頂点)と見なす。
そして、下記の計算を反復する。
1. 最も深い(最も下にある)ディレクトリを最初に探し出す。
2. それに対応する頂点から根までの経路から、最も遠い頂点に相当するディレクトリを探し出す。
3. 既に探し出した全てのそれぞれの頂点から根までの経路から、同様に最も遠いものを探し出す。
4. 反復的に3.を必要な回数に達するまで繰り返す。
補足: 探し出す頂点は、多数ある中から1つを選ぶが、等確率にランダムに選ぶ。
オプション:
-. 0 : ピリオドでファイル名が始まる隠しファイルは探索しない。
-g N : 最大限N個を探し出すこととする。
-l N : 探索を続ける際に、遠さの最小限を設定する。
-s N : 乱数シードをNに設定する。
-d str : strの値により、出力するパスに現れる各ディレクトリに次の補助情報を括弧内に追加。
-d d : その下のディレクトリの個数を出力。
-d f : その下のディレクトリ以外のファイルの個数を出力。
-d s : その下のディレクトリにあるファイルのバイトサイズの合計を出力。
-d D : その上のディレクトリの直下にあるディレクトリの個数を出力。(兄弟ディレクトリに相当)
-d F : その上のディレクトリの直下にある、ディレクトリ以外のファイルの個数を出力。
-y N : Nの値により,出力するパスの部分的な強調のさせ方に関して下記の異なる動作をする。
-y 0 : 着色をしない。
-y 1 : 分岐の発生したディレクトリの1箇所のみを明るい色で強調する。(初期設定)
-y 2 : 分岐の発生したディレクトリ箇所から下も全て明るい色で強調する。
-x DIRNAME ; ディレクトリ名をオプション上で指定する
-L シンボリックリンクに関する処理 (辿るようにする)
開発上のメモ
* 初期化時に、blessの前に、$x->{name}がうまくいかなかった。
* $first を $root から分ける必要があったのか
* given を使ったこと
* 具体的なファイル名 -f で。
* (乱数の利用の最適か -- 比較せよ MSソフトで)
* ( 最遠距離の等しいものが多数あるばあいに、出力優先順位を考えた方が良さそう。)
* (ランダムになってない!?)
* -h Nを実装したい。
* -S で 直下にファイルがたった1個のディレクトリしかない場合に、縮めることをしようとしたが、厄介。
* 総ファイル数/総ディレクトリ数を出力したい。簡単にできる処理のはず。
* 分岐点から下のディレクトリ数またはファイル数を知りたい
* /Applicationの下の各アプリは、ディレクトリ構成にそれぞれ特徴がある。もつと調べてみたい。(特定のフレーズが現れる、分かり安くバージョン情報が現れるなど)
* inode でいろいろうまくやれないか
* 複数のディレクトリを引数に与えられ時の処理を加えたい。
* Ctrl+Cに対する処理を加えたい。
* Getopt::Longを使って --usage を使えるようにしたい。