投稿日:
    								
    									2018年4月14日    								
    								最終更新日:
    								
    									
    								
    							    						
【めちゃくそ便利】treeコマンドでディレクトリ構造を出力しよう!【オプション多数】
YouTubeも見てね♪
ねこじゃすり
猫を魅了する魔法の装備品!
Anker PowerCor
旅行には必須の大容量モバイルバッテリー!
[ノースフェイス] THE NORTH FACE メンズ アウター マウンテンライトジャケット
防水暴風で耐久性抜群なので旅行で大活躍です!
ペヤング ソースやきそば 120g×18個
とりあえず保存食として買っておけば間違いなし!
モンスターエナジー 355ml×24本 [エナジードリンク]
脳を活性化させるにはこれ!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
目次
ディレクトリ構造の表現方法
ディレクトリ構造をうまく表現したい
主にインフラ構築やWebシステムを開発していると、他の開発者にディレクトリ構造を共有したいという場合があると思います。
その場合、自分でFinderやエクスプローラーを開きながら手打ちでディレクトリ構造をテキストエディターで作ると、ディレクトリ構造が複雑な場合に確実に死亡しますし、タイポやコピペミスで間違ったディレクトリ構造になってしまい、結果として正しくない情報を共有してしまう恐れがあります。
また、自前でディレクトリ構造を表現する場合、以下のような文字記号を利用して表現すると思いますが、半角や全角がまじるとうまくインデントが表現されずに見にくくなってしまうことも多々あります。
| 1 2 3 4 5 6 | ┣ ┠ ┝ ├ ┫ ┨ ┥ ┤ 
 │ ┃ ─ ━ ┌ ┏ ┓ ┐ └ ┗ ┛ ┘ | 
試しに以下のようなディレクトリを自前で上記の罫線で表現してみましょう。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 
../../../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でインストールしましょう。
以下のコマンドを実行してください。
| 1 | 
brew install tree
 | 
以下のような実行ログが表示されればインストール完了です。
| 1 2 3 4 | 
==> 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
 | 
使い方
まずはシンプルなディレクトリ構造を出力してみましょう。
出力したいディレクトリにて、以下のコマンドを実行してみてください。
| 1 | tree | 
以下のような表示になり、再起的にディレクトリ情報が表示されます。
| 1 2 3 4 5 6 7 8 9 10 11 | . ├── common
 │   └── common.html
 ├── empty
 ├── fuga
 │   └── fuga.html
 ├── hoge
 │   └── hoge.index
 └── �\227��\234��\236
 
    └── �\201\223�\202\223�\201��\201��\201� 
        └── hello.txt
 | 
しかし、日本語が文字化けしちゃってますね。。。
オプション
スポンサーリンク
336×280
日本語文字化け対応
-Nをつけて実効することで日本語が含まれていても文字化けすることなく表示することが可能になります。
| 1 2 3 4 5 6 7 8 9 10 11 12 | 
tree -N
 . ├── common
 │   └── common.html
 ├── empty
 ├── fuga
 │   └── fuga.html
 ├── hoge
 │   └── hoge.index
 └── 日本語 
    └── こんにちは 
        └── hello.txt
 | 
空ディレクトリ非表示
–pruneをつけることで、ファイルが一つも存在しないディレクトリの出力を対象外にすることが可能になります。
| 1 2 3 4 5 6 7 8 9 10 11 | 
tree --prune -N
 . ├── common
 │   └── common.html
 ├── fuga
 │   └── fuga.html
 ├── hoge
 │   └── hoge.index
 └── 日本語 
    └── こんにちは 
        └── hello.txt
 | 
出力階層指定
-L {表示したい階層数}をつけることで、特定の階層までの出力に制御することが可能になります。
| 1 2 3 4 5 6 7 8 9 10 11 | 
tree -L 2 -N
 . ├── common
 │   └── common.html
 ├── empty
 ├── fuga
 │   └── fuga.html
 ├── hoge
 │   └── hoge.index
 └── 日本語 
    └── こんにちは | 
相対パス表示
-f {パターン}をつけることで、実行ディレクトリからの相対パスでの出力をすることが可能になります。
| 1 2 3 4 5 6 7 8 9 10 11 12 | 
tree -f -N
 . ├── ./common
 │   └── ./common/common.html
 ├── ./empty
 ├── ./fuga
 │   └── ./fuga/fuga.html
 ├── ./hoge
 │   └── ./hoge/hoge.index
 └── ./日本語 
    └── ./日本語/こんにちは 
        └── ./日本語/こんにちは/hello.txt
 | 
パターン指定
-P {パターン}をつけることで、パターンにマッチする情報のみ出力することが可能になります。
正規表現での指定も可能です。
※パターンにマッチするファイルがなくてもディレクトリは表示されてしまいます
なので、–pruneオプションと組み合わせて使いましょう。
| 1 2 3 4 5 6 7 8 9 | 
tree -P 'fuga.html' -N
 . ├── common
 ├── empty
 ├── fuga
 │   └── fuga.html
 ├── hoge
 └── 日本語 
    └── こんにちは | 
除外
-I {場外対象}をつけることで、特定のディレクトリやファイルを除外して出力することが可能になります。
もちろん、正規表現での指定も可能です。
| 1 2 3 4 5 6 7 8 9 | 
tree -I 日本語 . ├── common
 │   └── common.html
 ├── empty
 ├── fuga
 │   └── fuga.html
 └── hoge
 
    └── hoge.index
 | 
複数除外
複数のファイルやディレクトリを場外したい場合、以下のように実行すると期待通りの出力になりません。
| 1 2 3 4 5 6 7 8 9 | 
tree -I common -I 日本語 . ├── common
 │   └── common.html
 ├── empty
 ├── fuga
 │   └── fuga.html
 └── hoge
 
    └── hoge.index
 | 
原因としては、-Iオプションは複数指定する場合は-Iオプションを複数つけるのではなく、以下のように除外対象を「|(パイプ)」で区切って指定する必要があります。
| 1 2 3 4 5 6 7 | 
tree -I "common|日本語"
 . ├── empty
 ├── fuga
 │   └── fuga.html
 └── hoge
 
    └── hoge.index
 | 
ディレクトリのみ出力
-dをつけることで、出力結果をディレクトリのみに絞ることが可能になります。
| 1 2 3 4 5 6 7 8 | 
tree -d -N
 . ├── common
 ├── empty
 ├── fuga
 ├── hoge
 └── 日本語 
    └── こんにちは | 
隠しファイル出力
-aをつけることで、隠しファイルや隠しフォルダも出力対象に含まれるようになります。
※デフォルトでは出力対象外
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 
tree -a -N
 . ├── .DS_Store
 ├── .private
 │   └── security.txt
 ├── common
 │   └── common.html
 ├── empty
 ├── fuga
 │   └── fuga.html
 ├── hoge
 │   └── hoge.index
 └── 日本語 
    └── こんにちは 
        └── hello.txt
 | 
ファイルサイズ出力
-hをつけることで、ファイルサイズも出力対象に含まれるようになります。
| 1 2 3 4 5 6 7 8 9 10 11 12 | 
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をつけることで、オーナー情報も出力対象に含まれるようになります。
| 1 2 3 4 5 6 7 8 9 10 11 12 | 
tree -u -N
 . ├── [{ユーザー名}  ]  common
 │   └── [{ユーザー名}  ]  common.html
 ├── [{ユーザー名}  ]  empty
 ├── [{ユーザー名}  ]  fuga
 │   └── [{ユーザー名}  ]  fuga.html
 ├── [{ユーザー名}  ]  hoge
 │   └── [{ユーザー名}  ]  hoge.index
 └── [{ユーザー名}  ]  日本語 
    └── [{ユーザー名}  ]  こんにちは 
        └── [{ユーザー名}  ]  hello.txt
 | 
グループ情報出力
-gをつけることで、グループ情報も出力対象に含まれるようになります。
| 1 2 3 4 5 6 7 8 9 10 11 12 | 
tree -g -N
 . ├── [{グループ名}   ]  common
 │   └── [{グループ名}   ]  common.html
 ├── [{グループ名}   ]  empty
 ├── [{グループ名}   ]  fuga
 │   └── [{グループ名}   ]  fuga.html
 ├── [{グループ名}   ]  hoge
 │   └── [{グループ名}   ]  hoge.index
 └── [{グループ名}   ]  日本語 
    └── [{グループ名}   ]  こんにちは 
        └── [{グループ名}   ]  hello.txt
 | 
ファイル出力
-oをつけることで、出力内容をファイルに書き出すことが可能です。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 
tree  -o tree -N
 
cat tree
 . ├── common
 │   └── common.html
 ├── empty
 ├── fuga
 │   └── fuga.html
 ├── hoge
 │   └── hoge.index
 ├── tree
 └── 日本語 
    └── こんにちは 
        └── hello.tx
 | 
終わりに
スポンサーリンク
336×280
以上のように、手作業でやるにはリスクや手間のかかるところをコマンド一発で正確な情報を作成することが可能になります。
また、今回紹介しきれなかった便利なオプションもまだまだあります。
開発をしている方なら必ず役に立つツールだと思いますので、是非使ってみてください♪






