ディレクトリ構造の表現方法
ディレクトリ構造をうまく表現したい
主にインフラ構築やWebシステムを開発していると、他の開発者にディレクトリ構造を共有したいという場合があると思います。
その場合、自分でFinderやエクスプローラーを開きながら手打ちでディレクトリ構造をテキストエディターで作ると、ディレクトリ構造が複雑な場合に確実に死亡しますし、タイポやコピペミスで間違ったディレクトリ構造になってしまい、結果として正しくない情報を共有してしまう恐れがあります。
また、自前でディレクトリ構造を表現する場合、以下のような文字記号を利用して表現すると思いますが、半角や全角がまじるとうまくインデントが表現されずに見にくくなってしまうことも多々あります。┣ ┠ ┝ ├
┫ ┨ ┥ ┤
│ ┃
─ ━
┌ ┏ ┓ ┐
└ ┗ ┛ ┘
試しに以下のようなディレクトリを自前で上記の罫線で表現してみましょう。
../../../directory/tree
├──.DS_Store
├──.private
│ └──security.txt
├──common
│ └──common.html
├──empty
├──fuga
│ └──fuga.html
├──hoge
│ └──hoge.index
└──日本語
└──こんにちは
└──hello.txt
すごくめんどくさいです。。。
treeコマンド
そんな苦難から助けてくれるのがtreeコマンドです!
このコマンドを使えば、一発でディレクトリをテキスト表示してくれるので、正確な情報を抽出する事が可能になります。
筆者はプログラミング関連の記事を多く執筆しているので、多用しています!!
Macであれば、Homebrewから簡単にインストールする事が可能です。
手順
インストール
まずはtree本体をHomebrewでインストールしましょう。
以下のコマンドを実行してください。brew install tree
以下のような実行ログが表示されればインストール完了です。==> Downloading https://homebrew.bintray.com/bottles/tree-1.7.0.el_capitan.bottle.1.tar.gz
Already downloaded: /Users/{ユーザー名}/Library/Caches/Homebrew/tree-1.7.0.el_capitan.bottle.1.tar.gz
==> Pouring tree-1.7.0.el_capitan.bottle.1.tar.gz
🍺 /usr/local/Cellar/tree/1.7.0: 7 files, 113.4KB
使い方
まずはシンプルなディレクトリ構造を出力してみましょう。
出力したいディレクトリにて、以下のコマンドを実行してみてください。tree
以下のような表示になり、再起的にディレクトリ情報が表示されます。.
├── common
│ └── common.html
├── empty
├── fuga
│ └── fuga.html
├── hoge
│ └── hoge.index
└── �\227��\234��\236
└── �\201\223�\202\223�\201��\201��\201�
└── hello.txt
しかし、日本語が文字化けしちゃってますね。。。
オプション
日本語文字化け対応
-Nをつけて実効することで日本語が含まれていても文字化けすることなく表示することが可能になります。tree -N
.
├── common
│ └── common.html
├── empty
├── fuga
│ └── fuga.html
├── hoge
│ └── hoge.index
└── 日本語
└── こんにちは
└── hello.txt
空ディレクトリ非表示
--pruneをつけることで、ファイルが一つも存在しないディレクトリの出力を対象外にすることが可能になります。tree --prune -N
.
├── common
│ └── common.html
├── fuga
│ └── fuga.html
├── hoge
│ └── hoge.index
└── 日本語
└── こんにちは
└── hello.txt
出力階層指定
-L {表示したい階層数}をつけることで、特定の階層までの出力に制御することが可能になります。tree -L 2 -N
.
├── common
│ └── common.html
├── empty
├── fuga
│ └── fuga.html
├── hoge
│ └── hoge.index
└── 日本語
└── こんにちは
相対パス表示
-f {パターン}をつけることで、実行ディレクトリからの相対パスでの出力をすることが可能になります。tree -f -N
.
├── ./common
│ └── ./common/common.html
├── ./empty
├── ./fuga
│ └── ./fuga/fuga.html
├── ./hoge
│ └── ./hoge/hoge.index
└── ./日本語
└── ./日本語/こんにちは
└── ./日本語/こんにちは/hello.txt
パターン指定
-P {パターン}をつけることで、パターンにマッチする情報のみ出力することが可能になります。
正規表現での指定も可能です。
※パターンにマッチするファイルがなくてもディレクトリは表示されてしまいます
なので、--pruneオプションと組み合わせて使いましょう。tree -P 'fuga.html' -N
.
├── common
├── empty
├── fuga
│ └── fuga.html
├── hoge
└── 日本語
└── こんにちは
除外
-I {場外対象}をつけることで、特定のディレクトリやファイルを除外して出力することが可能になります。
もちろん、正規表現での指定も可能です。tree -I 日本語
.
├── common
│ └── common.html
├── empty
├── fuga
│ └── fuga.html
└── hoge
└── hoge.index
複数除外
複数のファイルやディレクトリを場外したい場合、以下のように実行すると期待通りの出力になりません。tree -I common -I 日本語
.
├── common
│ └── common.html
├── empty
├── fuga
│ └── fuga.html
└── hoge
└── hoge.index
原因としては、-Iオプションは複数指定する場合は-Iオプションを複数つけるのではなく、以下のように除外対象を「|(パイプ)」で区切って指定する必要があります。tree -I "common|日本語"
.
├── empty
├── fuga
│ └── fuga.html
└── hoge
└── hoge.index
ディレクトリのみ出力
-dをつけることで、出力結果をディレクトリのみに絞ることが可能になります。tree -d -N
.
├── common
├── empty
├── fuga
├── hoge
└── 日本語
└── こんにちは
隠しファイル出力
-aをつけることで、隠しファイルや隠しフォルダも出力対象に含まれるようになります。
※デフォルトでは出力対象外tree -a -N
.
├── .DS_Store
├── .private
│ └── security.txt
├── common
│ └── common.html
├── empty
├── fuga
│ └── fuga.html
├── hoge
│ └── hoge.index
└── 日本語
└── こんにちは
└── hello.txt
ファイルサイズ出力
-hをつけることで、ファイルサイズも出力対象に含まれるようになります。tree -h -N
.
├── [ 102] common
│ └── [ 0] common.html
├── [ 68] empty
├── [ 102] fuga
│ └── [ 0] fuga.html
├── [ 102] hoge
│ └── [ 0] hoge.index
└── [ 102] 日本語
└── [ 102] こんにちは
└── [ 0] hello.txt
オーナー情報出力
-uをつけることで、オーナー情報も出力対象に含まれるようになります。tree -u -N
.
├── [{ユーザー名} ] common
│ └── [{ユーザー名} ] common.html
├── [{ユーザー名} ] empty
├── [{ユーザー名} ] fuga
│ └── [{ユーザー名} ] fuga.html
├── [{ユーザー名} ] hoge
│ └── [{ユーザー名} ] hoge.index
└── [{ユーザー名} ] 日本語
└── [{ユーザー名} ] こんにちは
└── [{ユーザー名} ] hello.txt
グループ情報出力
-gをつけることで、グループ情報も出力対象に含まれるようになります。tree -g -N
.
├── [{グループ名} ] common
│ └── [{グループ名} ] common.html
├── [{グループ名} ] empty
├── [{グループ名} ] fuga
│ └── [{グループ名} ] fuga.html
├── [{グループ名} ] hoge
│ └── [{グループ名} ] hoge.index
└── [{グループ名} ] 日本語
└── [{グループ名} ] こんにちは
└── [{グループ名} ] hello.txt
ファイル出力
-oをつけることで、出力内容をファイルに書き出すことが可能です。tree -o tree -N
cat tree
.
├── common
│ └── common.html
├── empty
├── fuga
│ └── fuga.html
├── hoge
│ └── hoge.index
├── tree
└── 日本語
└── こんにちは
└── hello.tx
終わりに
以上のように、手作業でやるにはリスクや手間のかかるところをコマンド一発で正確な情報を作成することが可能になります。
また、今回紹介しきれなかった便利なオプションもまだまだあります。
開発をしている方なら必ず役に立つツールだと思いますので、是非使ってみてください♪
