OOZOU
お問い合わせ
TIL一覧に戻る
shell

ファイルツリーを一覧表示するZsh関数

2020年10月13日

コマンドラインでディレクトリを移動していると、ディレクトリとサブディレクトリの構造を「ツリー」形式で確認できると便利なことがよくあります。treeのようなツールは数多くありますが、シェルに直接組み込めるシンプルな自作ソリューションが欲しくなることもあるでしょう。この記事では、ディレクトリ構造をツリー形式で一覧表示するシンプルな Zsh 関数の作り方を紹介します。

ファイルツリーを一覧表示するZsh関数を作る

デフォルトシェルとして Zsh を使っているなら、.zshrc ファイルにカスタム関数を追加することで、ディレクトリをツリー構造で表示する手早く効率的なコマンドを作れます。この関数は人気の tree コマンドと同じように動作しますが、ls と sed で構築されているため、Zsh環境に直接組み込むのが簡単です。

ステップ1:lst() 関数を .zshrc に追加する

最初のステップは、.zshrc ファイルの中に lst() 関数を定義することです。この関数は任意のディレクトリパスをオプション引数として受け取り、その地点からのディレクトリツリーを一覧表示します。ディレクトリを指定しない場合は、カレントディレクトリがデフォルトになります。

好みのテキストエディタで .zshrc ファイルを開き、次の関数を追加します。

lst() {
    if [ "$1" != "" ] # or better, if [ -n "$1" ]
    then
        ls -R $1 | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'
    else
        ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'
    fi
}

ステップ2:Zshの設定を再読み込みする

関数を追加したら、変更を反映させるために .zshrc ファイルを再読み込みする必要があります。ターミナルで次のコマンドを実行します。

sh
source ~/.zshrc

ステップ3:lst() 関数を使う

.zshrc に関数を追加すれば、すぐに使い始められます。lst() 関数を使うと、指定したディレクトリ内のすべてのサブディレクトリをツリー形式で一覧表示できます。使い方は次のとおりです。

フォルダ(例:spec)のサブディレクトリを一覧表示するには、次を実行します。

sh
lst spec

このコマンドは、specフォルダ内のすべてのサブディレクトリを一覧表示するツリー状の構造を生成します。

カレントディレクトリのツリー構造を見たい場合は、次を実行するだけです。

sh
lst

lst() 関数はフォルダ構造を出力するので、ディレクトリの階層を把握しやすくなります。

出力例

次のようなディレクトリ構造があるとします。

bash
spec/
├── controllers/
│   └── users/
├── models/
└── views/

lst spec コマンドを実行すると、次のような出力が得られます。

css
   spec
   |--controllers
   |   |--users
   |--models
   |--views

このシンプルなツリー構造のおかげで、ディレクトリとサブディレクトリの関係を視覚的に把握しやすくなります。

仕組み

関数をステップごとに見ていきましょう。

  1. ls -R $1:ls -R コマンドはディレクトリ(引数が指定されていなければカレントディレクトリ)の内容を再帰的に一覧表示します。
  2. grep ":$":結果をディレクトリ名(: で終わる行)だけにフィルタリングします。
  3. sed コマンド:
    • 's/:$//':各ディレクトリ名の末尾のコロンを取り除きます。
    • 's/[^-][^/]*//--/g':スラッシュ(/)をダッシュ(--)に置き換え、構造をツリー状の形式に変換します。
    • 's/^/ /':ディレクトリツリーにインデントを追加します。
    • 's/-/|/':ダッシュを縦のパイプ(|)に置き換え、ツリー形式をさらに整えます。

ステップ4:lst() 関数をカスタマイズする

lst() 関数は必要に応じて簡単にカスタマイズできます。たとえば、ツリー構造のフォーマットを変えたり、ファイルを一覧表示するためのオプションを追加したりできます。ディレクトリだけでなくファイルも頻繁に一覧表示したい場合は、ディレクトリのみを表示する grep フィルタを取り除いて、ファイルも含めるように関数を変更するとよいでしょう。

代替手段:tree コマンドを使う

お好みであれば、ディレクトリ構造の表示専用に設計された tree コマンドを使うこともできます。tree は広く利用できるユーティリティで、ほとんどのUnix系システムにインストールできます。tree をインストールするには、システムに応じて次のいずれかのコマンドを使います。

UbuntuやDebian系のシステムの場合:

sh
sudo apt-get install tree

macOSの場合:

sh
brew install tree

インストールしたら、tree コマンドで同様の出力を生成できます。

sh
tree spec

tree コマンドには、ファイルサイズやパーミッションの表示など、より多くの機能が最初から備わっています。とはいえ、シンプルに保ちたい場合や tree が使えない場合には、lst() 関数は軽量で優れた代替手段です。

まとめ

今回作成した Zsh関数 は、ディレクトリ構造をツリー形式で一覧表示するシンプルで効率的な方法を提供します。lst() 関数を .zshrc ファイルに追加すれば、システム上の任意のフォルダのサブディレクトリを素早く視覚化できます。これは、複雑なディレクトリ構造を移動したり、プロジェクト内のファイルとフォルダの階層を理解したりするのに非常に役立ちます。

より多くの機能が必要なら、高度な機能を備えた tree コマンドの利用を検討してください。ただし、Zshシェルに直接組み込める軽量なカスタムソリューションとしては、lst() 関数は最適な選択肢です。


よくある質問

1. lst() 関数は何のためのものですか?

lst() 関数は、ディレクトリ構造をツリー形式で表示するカスタムZsh関数です。ls と sed を使って出力をフォーマットし、ターミナル上でフォルダ階層を視覚的に把握しやすくします。

2. lst() 関数をZshの設定に追加するには?

.zshrc ファイルを編集して関数定義を貼り付ければ追加できます。その後、source ~/.zshrc を実行して設定を再読み込みすると、関数が使えるようになります。

3. lst() 関数の出力はカスタマイズできますか?

はい。出力をフォーマットしている sed コマンドを変更することでカスタマイズできます。ツリー構造を変えたり、詳細を追加したり、ファイルを一覧に含めたりすることもできます。

4. lst() 関数の代わりになるものはありますか?

tree コマンドは、ディレクトリ構造をツリー形式で表示する、広く利用できるユーティリティです。lst() 関数より多くの機能を備えており、ほとんどのUnix系システムにインストールできます。

5. lst() 関数はZsh以外のシステムでも使えますか?

lst() 関数はZsh向けに書かれていますが、適切な設定ファイル(Bashなら .bashrc)に追加することで、Bashなど他のシェルにも簡単に適応できます。

lst() 関数をZshのワークフローに組み込めば、コマンドライン体験が向上し、ディレクトリの移動がずっと楽になります。

「shell」の関連記事

shell2020年12月8日

BashとZshでシークレット(プライベート)なコマンドを実行する

コマンドの前にスペースを1つ入れるだけで、~/.bash\_history に保存されなくなります。例: qrencode -o out.png "Some secret text"

shell2020年10月22日

Homebrewでpostgresデータベースをアップグレードする

postgresをアップグレードするには次を実行します

shell2020年10月13日

Amazon AWS S3 CLI で権限を指定してコピーする

term (または同等のターミナル) を開き、次を貼り付けます:

プロジェクトをお考えですか?

あなたが構築しているものについてお聞かせください。

会話を始めるhello@oozou.com
OOZOU Logo

バンコク · シンガポール · 香港

X
Facebook
Instagram
LinkedIn

サービス

  • Web開発
  • AIエージェント & 生成AI
  • モバイルアプリ開発
  • データ分析 & エンジニアリング
  • UI/UX & プロダクトデザイン
  • デジタルトランスフォーメーション

会社情報

  • 会社概要
  • 採用情報
  • ブログ
  • 事例研究
  • Today I Learned
  • お問い合わせ

その他

  • 業界
  • パートナーネットワーク
© 2026 OOZOU. 無断転載を禁じます。
プライバシーポリシー行動規範ABACポリシー