Linuxでtreeコマンドがない!? 標準コマンドだけで階層表示するコピペ集

はじめに

勝手に環境をいじれないサーバや、treeコマンドが標準で入っていない環境(ミニマルなサーバーやDockerコンテナなど)ではディレクトリ構成をきれいに出力するのが少し面倒です。そこで、標準コマンドでtreeっぽくディレクトリ表示できる用途別のコピペ集を作ってみました。

treeコマンドを叩いたら command not found と言われた……」 Linux標準の findsed を組み合わせれば、同じような表示が可能です。

古い記事でよく見る定番から、実務で役立つ「ドキュメント向け」まで、用途に合わせて使い分けてください。

簡易目次

1. 【超軽量】とにかく中身をざっくり把握したい時

sedの置換を最小限にして、ディレクトリの深さをスペースで表現するストレートなタイプです。

コピペ用コマンド

find . -not -path '*/.*' | sed 's/[^/]*\//  /g'

実行結果例

treeコマンドの代替案その1
  • ポイント: 記号を使わないので、階層が浅いときまたは、逆にフォルダ数が多いときに見やすい。サクッとコピペしておいても比較的成形しやすいです。

2.1【tree風・定番】階層表示付き(隠しファイル込み)

|-- で階層表示する場合。10年以上前から使われている、最も有名なワンライナーです。シンプルにすべての階層を表示します。

コピペ用コマンド

pwd; find . | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--\1/;s/\/[^/|]*/|  /g'

実行結果例

treeコマンドの代替案その2.隠しファイルを含める
  • 特徴: すべてのファイル・フォルダを表示します。
  • 欠点: .git などの隠しフォルダもすべて出るため、プロジェクトによっては表示が長くなりすぎます。

2.2 【tree風・定番】階層表示付き(隠しファイル抜き)

.gitなど、不要な隠しファイルは表示しない版。

コピペ用コマンド

pwd;find . -not -path '*/.*' | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--\1/;s/\/[^/|]*/|  /g'

実行結果例

treeコマンドの代替案その2 隠しファイルやフォルダ抜き
  • 特徴: 隠しファイルではないすべてのファイル・フォルダを表示します。

3. 【レポート・ドキュメント用】wordなどに張り付ける時

|-- ではなく、罫線記号(├─└─)を用いて表記したモダンバージョン(ctrl+shift+cなどでコピペして利用する)

コピペ用コマンド

pwd;find . -not -path '*/.*' | sed -e 's/[^-][^\/]*\//  │/g' -e 's/│\([^│]*\)$/  ├── \1/'

実行結果例

treeコマンドの代替案その3。wordなどのドキュメントに張り付ける場合
  • 貼り付けのコツ: WordやGoogleドキュメントに貼る際は、「MS ゴシック」や「Courier New」などの等幅フォントに設定するとズレません(ずれにくい)。
  • 欠点: ターミナルだとレイアウトが崩れがち

張り付けた場合は以下のような感じになる。(テキストエディタの設定によっては多少見た目が変わる可能性があります)

※以下はブログでの表示例です(MSゴシック,CSSでの再現)

/home/tukumo . ├── html │ ├── index.html ├── server │ ├── memo.txt ├── testdir │ ├── var │ │ ├── www │ │ │ ├── html │ │ │ │ ├── my_project ├── bin

コピペした場合のプレビュー

4. 【エンジニア向け】ドキュメント作成用(Mermaid / PlantUML)

設計書やGitHubのREADMEに「図」としてディレクトリ構造を載せたい場合に便利な、特殊フォーマット出力用コマンドです。

A. graph形式(GitHub / Notion / Obsidian用)

Mermaidの「graph」機能を使うと、マインドマップのような綺麗な図が描けます。

find . -maxdepth 3 -not -path '*/.*' -not -path '.' | sed 's|^\./||' | \
awk -F/ '
BEGIN { print "graph LR"; print "  root[root]" }
{
  parent_id = (NF == 1) ? "root" : $(NF-1);
  gsub(/\./, "_", parent_id);
  
  node_id = $NF;
  gsub(/\./, "_", node_id);
  if (NF == 1) {
    print "  root --> " node_id "[" $NF "]";
  } else {
    print "  " parent_id " --> " node_id "[" $NF "]";
  }
}'

A. 出力結果例

treeコマンドの代替案その4. marmeid形式
treeコマンドの代替案その4. marmeid形式 githubでの表示

githubでの表示プレビュー

  • 貼り付け方: Markdownの中に mermaid ... と書いて、その中に結果を貼り付けます。
  • 用途: GitHubのプロジェクト紹介や、ブログで視覚的に構造を見せたい時に。

B. PlantUML形式(技術仕様書用)

共通図解ツール「PlantUML」のTree形式(Salt)で出力します。出力されたsalt形式のディレクトリ構成テキストをPlantUML Official Online Serverなどに張り付ければ、pngやsvg形式にすることができます。

echo "@startsalt"; echo "{"; echo "{T"; find . -maxdepth 3 -not -path '*/.*' | sed -E 's/[^/]*\//+/g' | sed 's/^+/ +/'; echo "}"; echo "}"; echo "@endsalt"

B. 出力結果例

plantuml形式で出力
紹介したlinuxコマンドのワンライナーで生成した plantUMLをプレビューしたものの例

PlantUML Official Online Server(公式プレビューア)に張り付けSVGに変換した例

  • 貼り付け方: PlantUMLのエディタに貼り付けると、ディレクトリツリーの図が生成されます。
  • 用途: 本格的なシステム設計書や、複雑なフォルダ構成を整理したい時に。

永続化と保存(alias,.bashrc/.zshrc)

1回限り使う場合は、コピペで問題ないですが、何度か呼び出したいときは、.bashrcなどにalias登録しておくと便利です。登録の仕方や仕組みについては以下の記事にて説明しています。

関連記事

Linuxコマンド入門第4シリーズ。aliasコマンドの使い方まとめ

【alias】よく使う長いLinuxコマンドを短縮・登録する使い方【Linuxコマンド入門 Part4-1】

aliasコマンドの使い方を初心者向けに解説。長いLinuxコマンドに短い別名を付けて作業効率を上げる方法や、rmの安全設定など便利なエイリアス例も紹介します。

Linuxコマンド入門第4シリーズ。Linuxでターミナル設定の永続化の仕方 bashrcやzshrcの仕組みと書き方

【.bashrc / .zshrc】Linux設定ファイルの書き方と反映方法【Linuxコマンド入門 Part4-2】

Linuxで設定したaliasが消えてしまう?原因は設定の保存方法にあります。.bashrc / .zshrc の編集方法と source コマンドで設定を永続化する方法を初心者向けに解説。

最後に

特に環境の制約がなければtreeを入れて確認するのが簡単ですが、plantUMLなどに対応させる場合、自分で書いた方が早かったりするので、コピペ集として置いておくことにしました。良しなにご活用ください。

このスニペットがお役に立ちましたら…… 本記事のコマンドやコードを自身のブログやSNSで紹介・引用される際は、ぜひ「tukumolog.com」へのリンクを添えていただけると励みになります! 詳しい引用方法やコードの利用規約については、こちらの [サイト利用・引用ガイド] をご覧ください。

ここまで読んでいただきありがとうございます。

では、次の記事で。 lumenHero