tree コマンド入門 - ディレクトリ構造をツリー表示する
この記事でできるようになること
- `tree` でディレクトリ構造を枝分かれの図として表示できる
- `-L` で深さを制限し、巨大なフォルダでも読める形で表示できる
- `-d` `-a` `-I` を組み合わせて、必要なものだけに絞り込める
前提知識(先に読むと理解しやすい記事)
この記事で解決できること
treeで ディレクトリファイルをまとめて整理する入れ物。Windows や macOS の「フォルダ」と同じもの。構造を一目で把握 できるようになります-Lで 深さを制限 して、巨大なフォルダでも見やすく表示できます-d-a-Iで 必要なものだけ を絞り込めますlsの繰り返しから 構造の可視化 に切り替えられます
対象読者:Linux 入門者。ls と cd でフォルダの中を行き来するのに疲れた方。
言葉の整理
- ディレクトリ:Windows や Mac でいうフォルダのことです。「フォルダ」「ディレクトリ」は同じものを指します。
- 階層:フォルダの中にフォルダがある入れ子の深さのことです。「レベル」とも呼びます。
- 隠しファイル:名前が
.から始まるファイルです。既定では一覧に出ません。「ドットファイル」とも呼びます。 - オプション:コマンドの後ろに付ける
-Lのような指定です。動きを変えるための指示です。 - カレントディレクトリ:いま自分がいるディレクトリのことです。「現在地」と読み替えて構いません。
- シェル入力したコマンドを解釈してコンピュータに実行させる対話プログラム。:ターミナルであなたの入力を受け取るプログラムです。「シェル」「ターミナル」「コンソール」はほぼ同じものを指す別の呼び方です。
- クォート文字列を引用符(' や ")で囲むこと。スペースなどを含む値をひとまとまりとして扱える。:
'で文字列を囲むことです。囲むと、記号がそのままの文字として渡ります。
tree は表示するだけのコマンドです。ファイルを消したり書きかえたりしません。何度実行してもフォルダの中身は変わりません。安心して試してください。
導入:リナの「ls 迷子」事件
ls して cd して、また ls して、の繰り返しです。全体像が頭に入ってきません。ls 迷子」だね。一段ずつ潜って戻ってを繰り返すと、いま自分がどこにいるか分からなくなるよね。tree コマンドだよ。ディレクトリの中身を 枝分かれの図 で表示してくれるんだ。結論を先に
tree= ディレクトリ構造を ツリー(枝分かれ図)で可視化 するコマンド- そのまま
treeで現在地以下を表示、tree パスで場所を指定 - 巨大フォルダは
tree -L 2(深さ制限)とtree -I 'node_modules'(除外)が必須
1. tree とは何か?
結論:
treeはディレクトリの中身を枝分かれの図で表示するコマンド。lsを何度も叩かなくても階層構造が一目で分かる。
tree は ls と何が違うんですか?ls は その場所の中身だけ を一覧にするね。tree は その下の階層をすべて辿って、枝分かれの図で見せてくれるんだ。ls を全部のフォルダで自動的に実行してくれる、ということですか。実際に表示すると、次のようになります。
.
├── README.md
├── src
│ ├── index.js
│ └── utils
│ └── format.js
└── tests
└── index.test.js
3 directories, 4 files
図の読み方
├──└──:その階層にあるファイルやフォルダです。└──は最後の 1 つを表します│:枝が下に続いていることを示す縦線です- 字下げの深さ:そのまま階層の深さを表します
- 最後の行:ディレクトリ数とファイル数の合計 です
2. インストール
結論:
treeは標準では入っていないことが多い。apt/dnfでインストールする。
tree と打って「command not found」が出たら、インストールしよう。# Ubuntu / Debian 系 $ sudo apt install tree # RHEL / Fedora 系 $ sudo dnf install tree # macOS(Homebrew) $ brew install tree
パッケージ名は、どのディストリビューションでも tree で共通です。インストールが終わったら tree --version でバージョンを確認できます。
3. 基本の使い方
結論: 引数なしの
treeでカレントディレクトリ以下を表示。tree パスで対象の場所を指定する。
カレントディレクトリを表示
# いまいる場所の中身をツリー表示 $ tree
場所を指定して表示
# 指定したディレクトリを表示 $ tree /etc # ホームディレクトリを表示 $ tree ~
tree と打っただけで、フォルダの奥の奥まで全部出てきました。リナの失敗:画面が流れて止まらない
tree を実行しました。画面が滝のように流れて、最後の行しか残っていません。$ tree
(数万行が流れたあと) 12043 directories, 98217 files
tree は 既定で一番下の階層まで全部 辿るんだ。だから node_modules のような巨大なフォルダも、中身を 1 つ残らず表示してしまう。-L で制限して、不要なフォルダを -I で外す。この 2 つを覚えれば、いつでも読める量に収まるよ。-L 2 で全体を見てから、深掘りします。$ tree -L 2 -I 'node_modules|.git'
流れてしまった画面は tree | less と書くと、1 画面ずつ止めて読めます。less の中では矢印キーで動き、q で終了します。
4. 深さを制限する(-L)
結論:
tree -L 数字で表示する階層の深さを制限できる。巨大なフォルダはまず-L 1や-L 2で全体像を掴む。
-L(Level)を使うよ。-L 2 なら 2 階層目まで しか表示しない。# 1階層だけ(直下の中身のみ、ls に近い) $ tree -L 1 # 2階層まで $ tree -L 2 /var/log
/var/log ├── apt │ ├── history.log │ └── term.log ├── journal ├── syslog └── dpkg.log 2 directories, 4 files
-L の使いどころ
- 初めて見るフォルダは
tree -L 1から始めます。次に-L 2と 浅いところから 深掘りします - 深さは 1 以上の整数で指定します(
-L 0はエラーになります) - 全体の地図が欲しいときは浅く指定します。特定フォルダの詳細を見たいときは深く指定します
5. 表示するものを絞り込む
結論:
-dでディレクトリのみ、-aで隠しファイルも表示、-Iで不要なフォルダを除外できる。
tree が一気に実用的になるよ。ディレクトリだけ表示(-d)
# フォルダ構造だけを把握したいとき $ tree -d -L 2
-d(directory)はファイルを全部隠すよ。フォルダの骨格だけ を見せてくれるんだ。隠しファイルも表示(-a)
# .git や .env などドット始まりも表示 $ tree -a -L 1
tree はデフォルトで隠しファイルを表示しない
.bashrc や .git のような ドット(.)で始まるファイル は、-a(all)を付けないと表示されません。
「設定ファイルが見当たらない」ときは、-a を付け忘れていないか確認してください。
不要なフォルダを除外(-I)
# node_modules を除外して表示 $ tree -I 'node_modules' # 複数を | で区切って除外 $ tree -I 'node_modules|.git|dist'
node_modules は中身が何万ファイルもありますよね。さっき画面が流れた原因もこれでした。-I(Ignore)で除外するのが定番だよ。|(パイプ)で区切れば複数を指定できる。node_modules .git dist あたりは除外の常連だね。逆に「これだけ見たい」なら -P
特定のパターンだけを表示したいときは -P(Pattern)を使います。tree -P '*.js' と書けば .js ファイルだけが残ります。
空のフォルダが邪魔なときは --prune を一緒に付けてください。該当ファイルを含まないフォルダが消えて見やすくなります。
6. 見やすく・サイズ付きで表示する
結論:
-Fで種類の記号付き、-h --duでディレクトリの合計サイズ付き、-o ファイルでファイルに保存できる。
種類が分かる記号を付ける(-F)
# ディレクトリに / 、実行ファイルに * を付ける $ tree -F -L 1
ls -F と同じ記号が付きます。末尾が / ならフォルダ、* なら実行可能ファイルです。一目で見分けられます。
サイズを表示する(-h / --du)
# 各ファイルのサイズを人間が読みやすい単位で $ tree -h # ディレクトリのサイズ(配下の合計)も表示 $ tree -h --du -L 1
--du の意味
--du は各ディレクトリのサイズを 配下にあるファイルの合計 として表示します。du コマンドと同じ考え方です。
-h(human readable)と組み合わせると 1.2K 3.4M のような読みやすい単位になります。どのフォルダが容量を使っているかを、おおまかに知りたいときに便利です。
ncdu のように容量調査にも使えますか?結果をファイルに保存(-o)
# ツリーをテキストファイルに書き出す $ tree -L 2 -o structure.txt
README に「ディレクトリ構成」を載せるときに便利です。tree -L 2 の出力をそのまま貼れば、構成図が一瞬で作れます。
不要なものは -I で除外してから貼ってください。読みやすい図になります。
なお -o は指定した名前のファイルを新しく作り、そこに結果を書き込みます。同じ名前のファイルがある場合は中身が置きかわります。実行する前に ls で同名ファイルがないか確認してください。
7. ミニ課題:自分の環境で試してみよう
結論: 深さ制限・ディレクトリのみ・除外指定の3問で
treeの実用オプションを定着させる。
tree は表示するだけだから、何度実行しても大丈夫だよ。課題 1: ホームディレクトリの直下に何があるかを、1 階層だけ表示して確かめよう。
ヒント 1(方向づけ)を見る
深さを制限するオプションを使います。今回は「直下だけ」なので、いちばん浅い指定にします。
英語の Level が手がかりです。
ヒント 2(コマンド名)を見る
使うのは tree です。深さの制限は -L に数字を続けて書きます。今回は 1 です。
ホームディレクトリは ~ と書けます。
答えを見る
$ tree -L 1 ~
/home/user ├── Documents ├── Downloads ├── Videos └── notes.txt 3 directories, 1 file
-L 1 に制限すると、ls と同じ範囲がツリーの形で並びます。
課題 2: ホーム以下のフォルダの骨組みだけを、2 階層まで表示しよう。ファイルは出さないようにします。
ヒント 1(方向づけ)を見る
2 つのオプションを組み合わせます。1 つは深さの制限です。もう 1 つはファイルを隠す指定です。
ファイルを隠す方は、英語の directory が手がかりです。
ヒント 2(コマンド名)を見る
深さは -L 2 です。ディレクトリだけにするのは -d です。2 つとも tree の後ろに並べて書けます。
答えを見る
$ tree -d -L 2 ~
/home/user ├── Documents │ └── work ├── Downloads └── Videos 4 directories
-d でファイルが消え、-L 2 で深さが 2 階層に収まります。最後の行もディレクトリ数だけになります。
課題 3: プロジェクトのフォルダで .git を除外して表示し、消えたことを確かめよう。
ヒント 1(方向づけ)を見る
見せたくないフォルダの名前を、コマンドに伝えます。深さの制限とは別のオプションです。
英語の Ignore が手がかりです。
ヒント 2(コマンド名)を見る
使うのは tree -I です。-I の後ろに、除外したい名前をクォートで囲んで書きます。
囲まずに書くと、| がシェルのパイプと解釈されます。
答えを見る
$ tree -a -L 1 -I '.git'
. ├── README.md ├── src └── tests 2 directories, 1 file
-a を付けても .git は出てきません。除外が効いている証拠です。
複数を除外したいときは '.git|node_modules' のように | で区切ります。
8. よくある落とし穴
結論: 深さ無制限で巨大フォルダを叩く、隠しファイルの表示忘れ、除外パターンのクォート忘れに注意。
やりがちな失敗 3 つ
- 大きいフォルダで
-Lなしで実行する → 画面が滝のように流れます。まず-L 1か-L 2から始めます - 隠しファイルが見えず焦る →
treeは既定で.始まりを隠します。-aの付け忘れを確認します - 除外パターンをクォートし忘れる →
|がシェルのパイプと解釈されます。-I 'node_modules|.git'のように囲みます
安全で使いやすい型
- 初めて見るフォルダ:
tree -L 2(浅く全体像を見ます) - 構成を説明したい:
tree -d -L 2(骨組みだけを出します) - リポジトリを見る:
tree -L 2 -I 'node_modules|.git|dist'(不要なものを除外します)
9. 振り返り
tree は ls と違って、下の階層まで辿って図にしてくれるんですね。-L で深さを止めて、-I で不要なフォルダを外すんでした。-L 2 から。この 1 手で読める量に収まるよ。今日の 3 行まとめ
treeはディレクトリ構造を枝分かれの図で表示する。lsの繰り返しが 1 回で済む-L 数字で深さを制限する。初めて見るフォルダは-L 2から始める-dはフォルダだけ、-aは隠しファイルも表示、-I 'パターン'は除外に使う