Linuxのtreeコマンドとは?ディレクトリ構造の表示・階層指定・除外オプションを解説

コマンドリファレンス

Linuxのtreeコマンドは、ディレクトリやファイルの構造を階層形式(ツリー形式)で表示するコマンドです。
通常のlsコマンドはファイルを一覧で表示するだけですが、treeはフォルダの親子関係を含めた構造を視覚的に確認できます。

プロジェクトの構成確認、README・設計書への記載、サーバー内のファイル配置の把握など、ディレクトリ構造を素早く理解したい場面で広く使われています。

treeコマンドを使う場面

Linuxでtreeコマンドが役立つのは、次のような場面です。

  • プロジェクトのフォルダ構成をチームに共有する
  • READMEや設計書にディレクトリ構成図を記載する
  • サーバー内のファイル配置を調査・把握する
  • 受け取ったファイル・パッケージの中身を確認する
  • 大量のディレクトリがある環境で構造を俯瞰する

インストール方法

Linuxではtreeコマンドが標準でインストールされていない場合があります。tree: command not foundと表示されたときは、以下の手順でインストールしてください。

Ubuntu / Debian系

sudo apt install tree

CentOS / RHEL系

# CentOS 7 / RHEL 7
sudo yum install tree

# CentOS 8以降 / RHEL 8以降
sudo dnf install tree

macOS(Homebrew)

brew install tree

基本の使い方

カレントディレクトリを表示

引数を指定しない場合は、現在のディレクトリの構造を表示します。

tree
.
├── README.md
├── src
│   ├── index.js
│   └── utils.js
└── package.json

1 directory, 4 files

特定のディレクトリを指定して表示

tree /var/www/html

対象のパスを引数として指定すると、そのディレクトリ以下の構造を表示します。

構文(Syntax)

tree [オプション] [ディレクトリ]

主なオプション一覧

オプション説明使用例
(なし)カレントディレクトリをツリー形式で表示tree
-L n表示する階層の深さを制限tree -L 2
-dディレクトリのみ表示(ファイルを除外)tree -d
-a隠しファイルを含めて表示tree -a
-I パターン指定パターンに一致するファイル・ディレクトリを除外tree -I "node_modules"
-fフルパスで表示tree -f
-sファイルサイズを表示tree -s
-hサイズを人間に読みやすい形式で表示(KB/MB)tree -h
-pパーミッションを表示tree -p
-u所有者を表示tree -u
-t更新時刻の順でソートtree -t
--noreport末尾のファイル数・ディレクトリ数のサマリを非表示tree --noreport

階層を指定して表示する(-L)

ディレクトリ数が多い環境では、treeをそのまま実行すると出力が大量になります。-Lオプションで表示階層を制限することで、必要な範囲だけ確認できます。

2階層まで表示

tree -L 2
.
├── README.md
├── src
│   ├── components
│   ├── pages
│   └── utils
└── package.json

4 directories, 2 files

3階層まで表示

tree -L 3

大規模プロジェクトではまず-L 2で全体像を把握し、詳細を確認したいディレクトリを絞り込んでから深く見ていく使い方が効率的です。

ディレクトリのみ表示する(-d)

ファイル数が多い環境では、ディレクトリ構造だけを確認したい場面があります。-dオプションを使うとファイルを除外してディレクトリのみ表示できます。

tree -d
.
├── src
│   ├── components
│   └── pages
└── tests

3 directories

フォルダ構成の整理や、プロジェクト設計の確認に特に有効です。-Lと組み合わせることも多いです。

tree -d -L 2

隠しファイルを表示する(-a)

LinuxやmacOSでは、.から始まるファイル・ディレクトリは通常表示されません。設定ファイルや.gitディレクトリなどを含めて確認したいときは-aを使います。

tree -a
.
├── .git
│   ├── HEAD
│   └── config
├── .gitignore
├── README.md
└── src
    └── index.js

特定のファイル・ディレクトリを除外する(-I)

-Iオプションでパターンを指定すると、一致するファイルやディレクトリを除外して表示できます。パターンには|で複数指定することも可能です。

node_modulesを除外

tree -I "node_modules"

複数のディレクトリを除外

tree -I "node_modules|vendor|.git"

特定の拡張子のファイルを除外

tree -I "*.log"

Javascriptプロジェクトでnode_modulesを除外する用途が最もよくある使い方です。

結果をテキストファイルに保存する

treeの出力をリダイレクトでファイルに保存すると、READMEや設計書にそのまま貼り付けられます。

ファイルに保存する基本

tree > tree.txt

オプションと組み合わせて保存

# 2階層まで、node_modulesを除外してファイルに保存
tree -L 2 -I "node_modules" > structure.txt

ターミナルの出力はそのままでは貼り付けると罫線(├── や └──)が含まれます。Markdownのコードブロックで囲うと正しく表示されます。

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

treeの出力でツリーの罫線(├──└──)が文字化けしたり、|--のようにASCII表示になる場合があります。

ロケール設定の確認

echo $LANG

ja_JP.UTF-8en_US.UTF-8などUTF-8が設定されていれば、通常は罫線が正しく表示されます。

ASCIIモードで表示する(-A / –charset=ASCII)

罫線が崩れる環境では、ASCIIモードで出力する方法があります。

tree --charset=ASCII
.
|-- README.md
|-- src
|   |-- index.js
|   `-- utils.js
`-- package.json

ファイルに保存してメールやチャットで共有する場合は、ASCII表示の方が文字化けしにくいことがあります。

実務での使いどころ

READMEにディレクトリ構成を記載する

GitHubなどのREADMEにプロジェクト構成を記載するとき、treeの出力をそのまま使えます。

# READMEに貼り付ける構成図を生成
tree -L 2 -I "node_modules|.git" --charset=ASCII

出力をMarkdownのコードブロックで囲って貼り付けると、GitHubで正しく表示されます。

```
.
|-- README.md
|-- src
|   |-- components
|   `-- pages
`-- package.json
```

プロジェクト構成をチームに共有する

SlackやNotionなどにプロジェクト構成を共有したいときは、treeの出力をファイルに保存して共有します。

tree -L 3 -I "node_modules|vendor|.git" > project-structure.txt

新しいメンバーのオンボーディング時や、設計レビュー時にも活用できます。

ls や findコマンドとの違い

ファイル操作ではlsfindもよく使われますが、用途が異なります。

コマンド主な用途特徴
lsファイルの一覧表示指定ディレクトリの直下のみ、シンプルな一覧
treeディレクトリ構造の可視化階層構造を視覚的に表示、構成の把握に特化
find条件を指定したファイル検索名前・日付・サイズ等で絞り込み、アクション実行も可能
  • 構造を確認したいtree
  • 条件を指定してファイルを探したいfind
  • 単純な一覧表示ls

findは検索・処理に強く、treeは構造の可視化に特化しています。「どこに何があるか把握したい」ならtree、「特定ファイルを探したい」ならfindが向いています。

WindowsのtreeコマンドとLinuxのtreeコマンドの違い

Windowsにもtreeコマンドが標準搭載されていますが、LinuxのものとはOSが異なるため、機能や動作が大きく違います。

項目Linux / macOSのtreeWindowsのtree
インストール多くの環境でインストールが必要標準搭載(OS付属)
オプション豊富(-L, -d, -a, -I など多数)少ない(/F でファイル表示など)
除外指定-I で柔軟に指定可能除外機能なし
出力先リダイレクトで自由に保存可能リダイレクト可能だが文字化けしやすい
文字コードUTF-8対応Shift-JIS / CP932のため注意が必要

Windows環境でLinuxと同様のtreeを使いたい場合は、WSL(Windows Subsystem for Linux)を使うか、Git Bashなどのターミナルを利用すると同等の機能が使えます。

実行結果の見方

treeの出力では、インデントと罫線によって階層構造が表現されます。

  • ├──(横線):同じ階層にまだ続きがある項目
  • └──(角線):同じ階層の最後の項目
  • (縦線):上位ディレクトリの継続を示す

末尾に表示されるX directories, Y filesはディレクトリとファイルの合計数のサマリです。

よくある疑問

treeコマンドが見つからない場合はどうするか

tree: command not foundと表示される場合は、インストールが必要です。Ubuntu/Debianならsudo apt install tree、CentOS/RHELならsudo yum install tree(またはdnf)、macOSならbrew install treeでインストールできます。

階層を浅く表示するにはどうするか

-Lオプションで表示する階層数を指定します。tree -L 2で2階層まで、tree -L 1で直下のみ表示できます。

node_modulesを除外するにはどうするか

tree -I "node_modules"で除外できます。複数除外したい場合はtree -I "node_modules|vendor|.git"のように|でつなぎます。

結果をコピー・保存するにはどうするか

tree > tree.txtでファイルに保存できます。macOSでクリップボードにコピーしたい場合はtree | pbcopy、Linuxではtree | xclip -selection clipboard(xclipのインストールが必要)を使います。

Windowsでも同じように使えるか

Windowsにはtreeコマンドが標準搭載されていますが、LinuxのものとはOSが違うため、-L-Iなどのオプションは使えません。WSL(Windows Subsystem for Linux)を使うか、Git Bashをインストールすると同等の機能が利用できます。

関連コマンド

Bash玄

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

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

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

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

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

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

Bash玄をフォローする

コメント