The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
 $0 [dirname]
   
   指定されたディレクトリから、i階層下にあるディレクトリで、さらにそこからj階層下まで
  何かディレクトリを持つものが何個あるのかを、行列状に示す。縦方向がiで、横方向がjに対応。
   シンボリックリンクのディレクトリは辿らない。存在する場合は、その数を出力する。
   dirname が指定されない場合は、現行ディレクトリが指定されたものと見なされる。

 出力表の解説 :
   1. 出力表において、「+」と表記された列は、i階層の合計値を示す。「++」は累積和。
   2. 最も左の列は i = 1,2,3.. を示す。最初の列の内、数は j = 0,1,2,..,(i-1)を示す。
   3. j=0 (対応する各ディレクトリは子ディレクトリを持たない)は黄色で示した。
      その部分に対応するディレクトリの例が、最も右の列に黄色で示される。
      (ディレクトリの例は、ランダムに抽出される。再現性の確保のため -s でシードが指定可能。)
   4. マゼンタ(紫)色で、各i(基点からのディレクトリ深さ)に対応するシンボリックリンファイルの
      ディレクトリの個数を示す。
   5. オプションの-fの指定により、plainファイルの個数を数える。
      出力表の最後の行の2列目が、指定ディレクトリ全体の plainファイルの総数と一致する。

  オプション: 

    -. 0 : 隠しファイルを辿らない。
    -f   : ディレクトリの個数で無くて、普通の(plainな)ファイルの個数を数える。(出力表の行列の各要素に対応するディレクトリが持つ直接の子ファイルの個数を計数する。)
    -g N1-N2 ; iがN1, jがN2に相当するディレクトリ名を出力する。N1-N2の書式は コンマ(,)で連結が可能
    -g ...[dx] ; xを指定文字列に含むことで表の出力を抑制する。dがある場合は深さ情報を抑制する。
    -g ...[Aa] : aの有無でディレクトリの表示が変わる。あれば、指定ディレクトリ名から表示する。Aを含めば、絶対パスとなる。
    -g ...l  : シンボリックリンクのディレクトリを出力する。 
    -l 0 : シンボリックリンファイルの情報は出力しない。
    -s N  : シャッフルの時の、ランダムシード。
    --nodiff : 出力表の要素をできるだけ右にずらす 「(i,j)要素は元の 基点から深さiにあるディレクトリから、下方向に潜ってたどる最も深いディレクトリが基点から深さjまで」に相当。
    --noshuffle : シャッフルをしない。-v1で辞書順最初、-v2で加えて辞書順最後が出力される。
    --pattern : (実験的)ディレクトリ名またはファイル名を正規表現で指定する。(末尾は$を指定するが、先頭文字へのマッチングは^ではなくて、/を指定すること。)

    -v N : 該当するディレクトリ名を、具体的に何個取り出すか。N=0,1,2が指定できる。
    -L N : 最も長い異なるディレクトリ名(のbasename)も N 個出力する。

  その他の注意: 
    - Ctrl+C では途中結果を出すのみで,停止しない。Ctrl+\で停止する。

  開発上の注意 : 
    * chdir ".." が意図通りに動作しないことがあったので、opendirを使った動作とした。
    * examples でパスの表示が長くなるので、うまく省略したい。たとえば、最後から3番目まで-にするか、途中を略称にするかしたい。
    * パスの途中の空白文字をエスケープするオプションを作りたい。
    * バターンは文字列で指定するが、他に、シンボリックリンクファイルだけをフィルタリングして数える機能もあれば良い。