treeコマンドでディレクトリ構成図を出力

たまに見かけるこんな図。

.
├── WebContent
│   ├── META-INF
│   ├── WEB-INF
│   │   └── views
│   │       ├── advice
│   │       │   ├── director
│   │       │   ├── history
│   │       │   └── manager
│   │       ├── drafts
│   │       ├── favors
│   │       ├── follows
│   │       │   ├── followers
│   │       │   ├── following
│   │       │   ├── management
│   │       │   │   ├── following
│   │       │   │   └── unfollowing
│   │       │   └── timeline
│   │       ├── ideas
│   │       ├── joins
│   │       │   ├── all
│   │       │   └── my
│   │       ├── layout
│   │       ├── login
│   │       ├── members
│   │       ├── reviews
│   │       │   ├── director
│   │       │   └── manager
│   │       └── topPage
│   └── scss
├── gradle
│   └── wrapper
├── sampleData
└── src
    ├── META-INF
    ├── controllers
    │   ├── advice
    │   │   ├── director
    │   │   ├── history
    │   │   └── manager
    │   ├── drafts
    │   ├── favors
    │   ├── follows
    │   │   ├── followers
    │   │   ├── following
    │   │   ├── management
    │   │   │   ├── following
    │   │   │   └── unfollowing
    │   │   └── timeline
    │   ├── ideas
    │   ├── joins
    │   │   ├── all
    │   │   │   └── punchOut
    │   │   └── my
    │   │       ├── punchIn
    │   │       └── punchOut
    │   ├── login
    │   ├── members
    │   ├── reviews
    │   │   ├── director
    │   │   └── manager
    │   └── toppage
    ├── filters
    ├── listeners
    ├── models
    │   └── validators
    └── utils

これってコマンド一発で出力できるんだね。今まで手打ちで書かれてるかと思ってたけど、そんなことをしていたらエンジニアの風上にも置けないだろう(プログラマの三大美徳参照)。

ただ、組み込みのコマンドではないからHomebrewでインストールする必要がある。

% brew install tree

開発環境。

% system_profiler SPHardwareDataType
Hardware:

    Hardware Overview:

      Model Name: MacBook Pro
      Model Identifier: MacBookPro16,3
      Processor Name: Quad-Core Intel Core i5
      Processor Speed: 1.4 GHz
      Number of Processors: 1
      Total Number of Cores: 4
      L2 Cache (per Core): 256 KB
      L3 Cache: 6 MB
      Hyper-Threading Technology: Enabled
      Memory: 16 GB
      System Firmware Version: 1554.100.64.0.0 (iBridge: 18.16.14556.0.0,0)

% sw_vers
ProductName:	macOS
ProductVersion:	11.3
BuildVersion:	20E232

% zsh --version
zsh 5.8 (x86_64-apple-darwin20.0)

% brew -v
Homebrew 3.1.7-24-g321c165

% tree --version
tree v1.8.0 (c) 1996 - 2018 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro

使い方をtldrコマンドで確認。

% tldr tree

tree

// 現在のディレクトリの内容をツリーとして表示する
Show the contents of the current directory as a tree.
More information: <http://mama.indstate.edu/users/ice/tree/>.

// 💡'num'レベルの深さまでのファイルとディレクトリを出力する(1はカレントディレクトリを意味する)
- Print files and directories up to 'num' levels of depth (where 1 means the current directory):
    tree -L num

// 💡ディレクトリのみを出力
- Print directories only:
    tree -d

// 💡隠しファイルも色付けして出力
- Print hidden files too with colorization on:
    tree -a -C

// 💡インデントなしでツリーを出力し、代わりにフルパスを表示(空白や特殊文字をエスケープしないようにするには、 `-N`を使用)
- Print the tree without indentation lines, showing the full path instead (use `-N` to not escape whitespace and special characters):
    tree -i -f

// 💡隣の各ノードのサイズを人間が読める形式で出力し、ディレクトリに累積サイズを表示( `du`コマンドみたいな)。
- Print the size of each node next to it, in human-readable format, with directories displaying their cumulative size (as in the `du` command):
    tree -s -h --du

// 💡ワイルドカード(glob)を使用し、一致するファイルを含まないディレクトリを削除して、ツリー階層内のファイルを出力
- Print files within the tree hierarchy, using a wildcard (glob) pattern, and pruning out directories that don't contain matching files:
    tree -P '*.txt' --prune

// 💡ワイルドカード(glob)を使用して、ツリー階層内のディレクトリを出力し、必要なディレクトリの祖先ではないディレクトリを削除
- Print directories within the tree hierarchy, using the wildcard (glob) pattern, and pruning out directories that aren't ancestors of the wanted one:
    tree -P directory_name --matchdirs --prune

// 💡指定したディレクトリを無視してツリーを出力
- Print the tree ignoring the given directories:
    tree -I 'directory_name1|directory_name2'

ドキュメント書く時とか便利かも。

% tree -s -h --du -C -d
.
├── [5.7K]  WebContent
│   ├── [  96]  META-INF
│   ├── [5.4K]  WEB-INF
│   │   └── [5.3K]  views
│   │       ├── [ 800]  advice
│   │       │   ├── [ 224]  director
│   │       │   ├── [ 192]  history
│   │       │   └── [ 224]  manager
│   │       ├── [ 224]  drafts
│   │       ├── [ 192]  favors
│   │       ├── [1.3K]  follows
│   │       │   ├── [ 192]  followers
│   │       │   ├── [ 192]  following
│   │       │   ├── [ 512]  management
│   │       │   │   ├── [ 192]  following
│   │       │   │   └── [ 192]  unfollowing
│   │       │   └── [ 224]  timeline
│   │       ├── [ 384]  ideas
│   │       ├── [ 544]  joins
│   │       │   ├── [ 224]  all
│   │       │   └── [ 192]  my
│   │       ├── [ 192]  layout
│   │       ├── [ 128]  login
│   │       ├── [ 352]  members
│   │       ├── [ 576]  reviews
│   │       │   ├── [ 224]  director
│   │       │   └── [ 224]  manager
│   │       └── [ 288]  topPage
│   └── [  96]  scss
├── [ 192]  gradle
│   └── [  96]  wrapper
├── [ 288]  sampleData
└── [5.3K]  src
    ├── [  96]  META-INF
    ├── [4.0K]  controllers
    │   ├── [ 512]  advice
    │   │   ├── [ 128]  director
    │   │   ├── [  96]  history
    │   │   └── [ 128]  manager
    │   ├── [ 128]  drafts
    │   ├── [ 128]  favors
    │   ├── [1.1K]  follows
    │   │   ├── [ 160]  followers
    │   │   ├── [ 256]  following
    │   │   ├── [ 384]  management
    │   │   │   ├── [ 128]  following
    │   │   │   └── [ 128]  unfollowing
    │   │   └── [  96]  timeline
    │   ├── [ 256]  ideas
    │   ├── [ 736]  joins
    │   │   ├── [ 256]  all
    │   │   │   └── [ 128]  punchOut
    │   │   └── [ 352]  my
    │   │       ├── [  96]  punchIn
    │   │       └── [  96]  punchOut
    │   ├── [ 128]  login
    │   ├── [ 288]  members
    │   ├── [ 384]  reviews
    │   │   ├── [ 128]  director
    │   │   └── [ 128]  manager
    │   └── [  96]  toppage
    ├── [ 288]  filters
    ├── [  96]  listeners
    ├── [ 416]  models
    │   └── [ 128]  validators
    └── [ 128]  utils

  12K used in 66 directories

オプションを組み合わせるとこんな感じ。実際のターミナルでは色付けされてもっと見やすい。

To comment

@TOC
閉じる