ezaは、ls
の代替となるコマンドです。前身であるexaをForkする形で開発され、2023年7月にリリースされました。exaと同様にRustで実装されており、小規模(small)、高速(fast)、シングルバイナリ(single binary)であることが掲げられています。
この記事ではls
コマンドにない機能を中心に説明します。以下では、次の環境が前提です。
- eza v0.16.1 (執筆時点での最新バージョン)
- git 2.39.3
- zsh 5.9 (x86_64-apple-darwin23.0)
インストール
インストール手順は公式サイトに記載されています。Homebrewなどのパッケージマネージャでインストールできるほか、RustのパッケージマネージャであるCargoでもインストールできます。筆者はHomebrewでインストールしました。
$ brew install eza
ezaの実行
eza
では、ls
と同様にオプションやファイル/ディレクトリを指定できます。ファイル/ディレクトリの指定がない場合は、カレントディレクトリの内容が表示されます。
$ eza [options] [files...]
ls
と異なり、デフォルトで色付きの表示となっている点が特徴です。
ls
をeza
のエイリアスにしておくとls
を打つ習慣を変えずに済みます。シェルの設定ファイル(.bashrc
や.zshrc
など)にエイリアスの設定を追加しておくとよいでしょう。
alias ls="eza"
ezaの基本オプション
eza
はls
が実装している-l
や-a
などの基本的なオプションを提供しているため、ls
の代替として機能します。
eza
では、オプションは3種類に分けられています。
- 表示オプション
- フィルタとソートのオプション
- ロングビューオプション
1. 表示オプション
表示オプションは、表示する内容や形式をカスタマイズするオプションです。ls
にない代表的なオプションとしては、木構造で表示する-T
(--tree
)があります。
$ eza -T
.
├── astro.config.mjs
├── dist
│ ├── about
│ ├── articles
...
2. フィルタとソートのオプション
フィルタとソートのオプションには、表示対象をファイルに限定する-f
(--only-files
)、ディレクトリに限定する-D
(--only-dirs
)、ソートをするための-s
(--sort=SORT_FIELD
)などがあります。
# ファイルのみ表示
$ eza -f
astro.config.mjs eslint.config.js package-lock.json package.json README.md tsconfig.json
# ディレクトリのみ表示
$ eza -D
dist node_modules public src
eza
では-s
がソートのオプションですが、ls
の-s
とは異なるので注意してください。
3. ロングビューオプション
ロングビューオプションは、-l
と併用することで機能するオプションです。代表的なオプションには-h
(--header
)や、次節で解説するGitに関するオプションなどがあります。
また、Unix系の場合は--total-size
でディレクトリ全体のサイズを表示することができます。
$ eza -lh --total-size
Permissions Size User Date Modified Name
.rw-r--r-- 109 username 1 1 00:00 astro.config.mjs
drwxr-xr-x 1.5M username 1 1 00:00 dist
.rw-r--r-- 282 username 1 1 00:00 eslint.config.js
...
Gitに関するオプション
eza
はls
と異なり、Gitに関するオプションを提供しています。Gitに関する基本的なオプションは--git
と--git-repos
の2つです。これらのオプションはロングビューオプションなので-l
と併用する必要があります。
--git
--git
はGitのステータスを表示するオプションです。eza
コマンドが表示するステータスは2文字で構成されており、1文字目がstagedファイルのステータス、2文字目がunstagedファイルのステータスを表します。ステータスはそれぞれ次の文字で表現されます。
- 変更なし:
-
- modified:
M
- new file:
N
- deleted:
D
- renamed:
R
- type-change:
T
- ignored:
I
- conflicted:
U
$ eza --git -l
rw-r--r-- 109 username 1 1 00:00 -- astro.config.mjs
drwxr-xr-x - username 1 1 00:00 -I dist
.rw-r--r-- 282 username 1 1 00:00 -- eslint.config.js
drwxr-xr-x - username 1 1 00:00 -I node_modules
.rw-r--r-- 314k username 1 1 00:00 -- package-lock.json
.rw-r--r-- 481 username 1 1 00:00 -- package.json
drwxrwxr-x - username 1 1 00:00 -- public
.rw-r--r-- 2.1k username 1 1 00:00 -- README.md
drwxrwxr-x - username 1 1 00:00 MN src
.rw-r--r-- 134 username 1 1 00:00 -- tsconfig.json
--git-repos
--git-repos
はGitリポジトリのステータスを表示するオプションです。リポジトリのステータスはそれぞれ次の文字で表現されます。
$ eza --git-repos -l
drwxr-xr-x - username 1 1 00:00 | master sample-files
drwxr-xr-x - username 1 1 00:00 | main sample-project
drwxr-xr-x - username 1 1 00:00 + feature/.. blog.ueda.dev
このほか、非表示系のオプションである--git-repos-no-status
と--no-git
もあります。詳しくはマニュアルを参照してください。
ezaの利用例
実際にeza
を使う場合、例えば-T
とフィルタオプションを組み合わせると必要な情報に絞って階層構造で可視化できるので実用的です。
# ディレクトリのみを木構造で表示
$ eza -TD
.
├── dist
│ ├── about
│ ├── articles
...
また、1行毎に表示する-1
(--oneline
)もフィルタオプションと組み合わせるとファイルの一括処理やバッチ処理などで使えるかもしれません。
# ファイルのみを1行毎に表示
$ eza -1f
.astro
.git
.github
...
開発状況
ezaはcafkafkを中心にメンテナンスされています。公式にmaintainedであることが表明されており、2023年7月のv0.10.3から執筆時点(同11月)まで計21回リリースされています。
また、GitHubでは3.8k近いstarを獲得しており、今後の動向が注目されます。