【Linux】treeコマンドでディレクトリ構造をツリー状に可視化する

目次

概要

treeコマンドは、ディレクトリ内のファイルやサブディレクトリの階層構造を、視覚的な「木構造(ツリー)」として表示するツールです。

ls -Rなどの再帰的なリスト表示では把握しにくいフォルダの全体像や、ファイルの配置関係を一目で理解するのに役立ちます。ドキュメント作成時の資料としても非常に重宝します。

※多くの環境で標準インストールされていないため、初回のみインストールが必要です。

# Ubuntu/Debian系
sudo apt install tree

# RHEL/CentOS系
sudo dnf install tree

仕様(引数・オプション)

構文

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

主なオプション

表示内容や対象を絞り込むためのオプションです。

オプション説明
-dファイルを表示せず、ディレクトリのみを表示します(Directory)。
-P [パターン]指定したワイルドカードパターンに一致するファイルのみを表示します(Pattern)。
-I [パターン]指定したパターンに一致するファイルを除外して表示します(Ignore)。
-pファイルのパーミッション(権限)を表示します。
-uファイルの所有ユーザー名を表示します。
-gファイルの所有グループ名を表示します。
-sファイルサイズをバイト単位で表示します(-hを使うと読みやすい単位になります)。
-Fファイルの種類を表す記号(/, *等)を末尾に付加します。
-L [数値]表示する階層の深さ(レベル)を制限します。

基本の使い方

ディレクトリ構造を表示する

引数にディレクトリパスを指定して実行します。指定しない場合はカレントディレクトリが表示されます。

tree my_project

実行結果イメージ:

my_project
├── config
│   ├── settings.json
│   └── database.yml
├── data
│   ├── raw
│   │   └── input.csv
│   └── processed
├── scripts
│   └── main.py
└── readme.md

5 directories, 4 files

実践コマンド

1. 詳細情報付きで特定のファイルのみ検索表示する

ユーザー入力の要件にある「パーミッション・ユーザー・グループ・サイズ」を表示しつつ、特定の拡張子(例: .conf)のみを抽出するコマンドです。

# 権限(-p)、ユーザ(-u)、グループ(-g)、サイズ(-s)を表示し、
# 末尾が .conf のファイル(-P)のみを対象にする
tree -upgs -P "*.conf" /etc/nginx

実行結果イメージ:

/etc/nginx
├── [-rw-r--r-- root     root        1024]  fastcgi.conf
├── [-rw-r--r-- root     root        2500]  mime.types
├── [-rw-r--r-- root     root        1500]  nginx.conf
└── [drwxr-xr-x root     root        4096]  conf.d
    └── [-rw-r--r-- root     root         500]  default.conf

1 directory, 4 files

-s(バイト表示)の代わりに -h を使うと 1.5K のように読みやすく表示されます。

2. 巨大なディレクトリの先頭だけを確認する

ファイル数が多すぎるディレクトリに対してtreeを実行すると、画面が流れてしまいます。headコマンドと組み合わせて冒頭部分だけを確認するのが定石です。

# 音楽データのディレクトリ構造の先頭5行だけを表示
tree /var/lib/music/artist_data/ | head -n 5

実行結果イメージ:

/var/lib/music/artist_data/
├── Electronic
│   ├── Daft Punk
│   │   ├── Discovery
│   │   └── Random Access Memories

3. ディレクトリ構造のみを表示する(ファイル除外)

全体のフォルダ構成だけを把握したい場合、-dオプションを使用します。

tree -d /var/log

カスタムポイント

目的の資料や調査に合わせて、以下のオプションを調整してください。

  • 除外設定 (-I "pattern"):
    • node_modules__pycache__ など、表示したくないディレクトリを除外するのに必須です。
    • 例: tree -I "node_modules|.git"
  • 階層制限 (-L 2):
    • 深すぎる階層を表示しないように制限します。ディレクトリの概観をつかむのに最適です。
  • ファイルの種類表示 (-F):
    • ls -F と同様に、ディレクトリには /、実行ファイルには * が付き、視認性が上がります。

注意点

  1. 日本語ファイル名の文字化け:
    • 環境によっては日本語ファイル名が文字化けして \343\201... のように表示されることがあります。その場合は -N オプション(文字コードをそのまま出力)を付けてください。
  2. 大量ファイル時の負荷:
    • ファイル数が数万件あるディレクトリで実行すると、完了まで時間がかかり、コンソールを埋め尽くします。Ctrl+C で中断するか、-L で階層を制限しましょう。
  3. パターン指定の引用符:
    • -P-I でワイルドカード(*)を使う際は、シェルに展開されないように必ずダブルクォーテーションで囲んでください(例: -P "*.txt")。

応用

ディレクトリ構造をテキストファイルに保存する

ドキュメントや引き継ぎ資料としてディレクトリ構成図を残したい場合、リダイレクトを使います。さらに -A オプションを使うと、罫線がテキスト文字(ASCII)ではなく綺麗に表示される場合がありますが、保存用には --noreport(集計行なし)や --charset=ascii が安全です。

# シンプルなアスキー文字の罫線でファイルに出力
tree --charset=ascii -o directory_structure.txt my_project

まとめ

treeコマンドは、複雑なディレクトリ構造を一瞬で可視化する優れたツールです。

  • 向く場面: プロジェクト構成の把握、納品時のファイルリスト作成、迷子になった時の現在地確認。
  • 変更ポイント: -dでディレクトリのみ、-Lで深さ制限、-P/-Iで表示対象のフィルタリング。
  • 注意点: 大量ファイルでの実行には注意し、必要なら head-L を併用する。

サーバーに入って最初に行う「探索」のフェーズで、ls と共に手放せないコマンドです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次