treeコマンドの使い方|ディレクトリ階層表示・除外・深さ指定オプション早見表

コマンドリファレンス

Linuxの tree コマンドは、ディレクトリ構造をツリー形式で視覚的に表示するコマンドです。通常の ls コマンドと異なり、ファイルやフォルダの階層関係を一目で俯瞰できるため、プロジェクト全体の把握や設計書の作成に欠かせません。実務では出力が長大になりがちなため、階層の深さ指定(-L)や不要なフォルダの除外(-I)を組み合わせるのが鉄則です。本記事では、日常業務ですぐに使えるワンライナーから主要オプション早見表、エラー対処法まで分かりやすく解説します。

【即解決】treeコマンド目的別1行実行コマンド集

「今すぐこの条件で出力したい」という方のために、実務で頻出するワンライナーをまとめました。目的に合わせてそのままコピー&ペーストして実行してください。

# 1. カレントディレクトリを2階層まで表示する
tree -L 2

# 2. ファイルを非表示にしてディレクトリ構造のみを表示する
tree -d

# 3. node_modules や .git などの不要なディレクトリを除外して表示する
tree -I 'node_modules|.git'

# 4. 隠しファイル(.envなど)も含めてすべて表示する
tree -a

# 5. 人間に読みやすいファイルサイズ(K, M, G)を付与して表示する
tree -h

# 6. 出力結果をテキストファイルに直接保存する
tree -o structure.txt

treeコマンドの主要オプション逆引き早見表

treeコマンドには多くのオプションが用意されていますが、実務で頻繁に使用するものは限られています。以下の早見表を活用して、目的に合ったオプションを組み合わせてください。

オプション 機能説明 実用例
-L <n> 表示する階層の深さを指定した数値までに制限 tree -L 2
-d ディレクトリのみを表示(通常ファイルを非表示) tree -d
-I '<pattern>' 指定したパターンに一致するファイル・ディレクトリを除外 tree -I 'node_modules|.git'
-a ドット(.)から始まる隠しファイルも含めてすべて表示 tree -a
-f 各ファイルのフルパス(または相対パスのプレフィックス付き)を表示 tree -f
-h ファイルサイズを読みやすい形式(K/M/Gバイト)で表示 tree -h
-p 各ファイルのパーミッション(権限モード)を表示 tree -p
-u ファイルを所有するユーザー名を表示 tree -u
-o <file> 画面に出力せず、結果を指定したファイルへ直接書き込み tree -o tree.txt
--charset=ASCII 罫線にASCII文字のみを使用し、ターミナルの文字化けを防止 tree --charset=ASCII

実務で使える頻出ユースケース & コピペ実例

日常の運用管理や開発実務で役立つ、主要オプションの組み合わせテクニックを解説します。

プロジェクト構造の俯瞰:深さ指定(-L 2)とディレクトリ限定(-d)

新規参画したプロジェクトや大規模なリポジトリでは、いきなり tree を引数なしで実行すると数千行のファイルが出力され、ターミナルが埋め尽くされてしまいます。まずはディレクトリのみを2階層で絞り込んで全体像を把握するのが鉄則です。

# 2階層以内のディレクトリ構造のみを表示
tree -d -L 2

実行結果の例:

.
├── backend
│   ├── api
│   ├── config
│   └── database
├── frontend
│   ├── components
│   ├── pages
│   └── public
└── infra
    ├── docker
    └── terraform

9 directories

このように -d -L 2 を指定することで、主要なモジュール構成をコンパクトに俯瞰できます。

node_modulesや.gitを除外してスッキリ表示(-I "node_modules|vendor|.git")

Node.jsやPHP、Pythonなどのモダン開発環境では、ライブラリ配下に膨大なファイルが自動生成されます。これらが表示に含まれると必要なソースコードが埋もれてしまうため、-I オプションで除外パターンを指定します。パイプ(|)で区切ることで複数の一括除外が可能です。

# node_modules、vendor、.git を除外して2階層まで表示
tree -L 2 -I 'node_modules|vendor|.git'

実行結果の例:

.
├── README.md
├── package.json
├── src
│   ├── App.jsx
│   ├── index.js
│   └── styles.css
└── tests
    ├── unit
    └── integration

3 directories, 5 files

※ パターンを引用符(シングルクォートまたはダブルクォート)で囲むことで、シェルによるパイプ解釈やワイルドカード展開を防ぐことができます。

ファイルサイズと権限を同時に確認(-h -p -u)

サーバー調査やトラブルシューティング時には、各ファイルのパーミッションや容量を一括で確認したい場面があります。-h(サイズ可読化)、-p(権限)、-u(所有者)を組み合わせることで、ls -la の詳細情報をツリー構造のまま把握できます。

# 権限、所有者、容量をツリー形式で一覧表示
tree -h -p -u -L 2 /var/log

実行結果の例:

/var/log
├── [-rw-r--r-- root    ]  120K  boot.log
├── [drwxr-xr-x syslog  ]  4.0K  nginx
│   ├── [-rw-r----- www-data]  2.3M  access.log
│   └── [-rw-r----- www-data]  450K  error.log
└── [-rw-rw-r-- root    ]   45K  wtmp

1 directory, 4 files

パーミッションの不一致によるアクセス権エラーの調査などに非常に重宝します。

設計書やREADMEに貼るためのテキスト保存(-o 出力とリダイレクト >)

GitHubのリポジトリドキュメント(README.md)や設計書にフォルダ構成図を記載したい場合、出力をテキストファイルに保存して共有します。

# -o オプションで直接ファイル保存
tree -L 2 -I 'node_modules|.git' -o structure.txt

# または標準リダイレクト(>)で保存
tree -L 2 -I 'node_modules|.git' > structure.txt

Markdownドキュメントに貼り付ける際は、コードブロックで囲むことで、インデントと罫線が崩れずに美しく表示されます。

よくあるエラー・落とし穴と対処法

treeコマンドを使用する際につまずきやすいポイントと解決手順をまとめました。

tree: command not found のインストール手順

Linux環境によっては、最小構成インストールなどで tree が初期導入されていないことがあります。tree: command not found(コマンドが見つかりません)と表示された場合は、各ディストリビューションのパッケージマネージャーでインストールを行ってください。

# Ubuntu / Debian 系
sudo apt update && sudo apt install -y tree

# RHEL / CentOS / AlmaLinux / Rocky Linux 系
sudo dnf install -y tree

# macOS(Homebrew)
brew install tree

いずれも数十秒程度で簡単に導入が完了します。

罫線が文字化け・崩れる場合の対処法

SSH接続先のリモートサーバーや古い端末エミュレータでは、ツリーの分岐線(├── や └──)が文字化けしたり、記号に化けてしまうことがあります。

主な原因はターミナルの文字コード(ロケール)設定です。まずは現在の環境変数を確認してください。

# ロケール設定の確認
echo $LANG

通常、ja_JP.UTF-8 や en_US.UTF-8 など UTF-8 が設定されていれば正常に表示されます。ロケールを変更できない環境や、テキストファイルとして安全に配布したい場合は、--charset=ASCII を指定してASCII文字だけで描画するのが確実です。

# ASCII文字(| や -)で描画して文字化けを防止
tree --charset=ASCII -L 2

実行結果の例:

.
|-- README.md
|-- src
|   |-- index.js
|   `-- utils.js
`-- package.json

文字コードに依存しないため、メールやプレーンテキストでのやり取りでも表示崩れが起きません。

Windows環境のtreeコマンドとの違いと注意点

Windowsのコマンドプロンプトにも標準で tree コマンドが存在しますが、Linuxの tree とは全くの別物です。

比較項目 Linux / macOS の tree Windows標準の tree
提供形態 パッケージマネージャーから導入 Windows OSに標準搭載
深さ指定 -L <n> で自由に指定可能 指定不可(最下層まで出力される)
除外指定 -I '<pattern>' で除外可能 除外機能なし
ファイル表示 デフォルトで表示(-d で非表示) デフォルトはディレクトリのみ(/F でファイル表示)
ASCII出力 --charset=ASCII /A オプション

Windows標準のtreeは -L や -I が使えないため、大規模なプロジェクトで実行すると停止できなくなるリスクがあります。Windows環境でLinuxと同様の高度なツリー表示を行いたい場合は、Git Bash または WSL2(Windows Subsystem for Linux) を利用してください。

まとめ:treeコマンドを使いこなして作業効率を最大化しよう

treeコマンドを実務でスマートに使いこなすための要点は以下の3点です。

  • 深さ指定(-L)と除外(-I)をセットで使う:大規模ディレクトリでは出力行数を絞り込み、node_modules などを必ず除外して視認性を確保する。
  • アンサーファーストで必要な情報だけを抽出する:ディレクトリのみ(-d)やサイズ・権限表示(-h -p)を組み合わせ、目的に最短で到達する操作を意識する。
  • 文字化け対策とWindows環境の差異を意識する:崩れが懸念される場面では --charset=ASCII を用い、WindowsではGit BashやWSL2を活用する。

適切なオプションを選んで、ディレクトリ探索やドキュメント作成の時間を大幅に短縮しましょう。

関連記事

日々のLinuxファイル操作・容量調査をさらに効率化するために、以下の解説記事もあわせてご活用ください。

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント