The next ls.

eza is what ls would be if it were written today: colour, icons, Git status and a tree view, in one small, fast binary.

cargo install eza

Cargo any platform Full instructions

  • Linux
  • macOS
  • Windows
  • BSD
  • several
lssince 1971
 ls -l
total 112
-rw-r--r-- 1 ces users 71787 Oct  4 11:11 Cargo.lock
-rw-r--r-- 1 ces users   287 Oct  2 22:53 Cargo.toml
drwxr-xr-x 6 ces users     6 Oct  3 23:18 crates
drwxr-xr-x 4 ces users     5 Sep  4 22:35 docs
-rw-r--r-- 1 ces users 13361 Oct  5 11:09 flake.nix
-rw-r--r-- 1 ces users 10598 Oct  5 11:09 README.md
-rw-r--r-- 1 ces users  6088 Oct  4 15:24 TESTING.md

same
folder

ezatoday
eza -l --icons --git
.rw-r--r-- 72k ces 4 Oct 11:11 -M Cargo.lock
.rw-r--r-- 287 ces 2 Oct 22:53 -- Cargo.toml
drwxr-xr-x - ces 3 Oct 23:18 -- crates
drwxr-xr-x - ces 4 Sep 22:35 -- docs
.rw-r--r-- 13k ces 5 Oct 11:09 M- flake.nix
.rw-r--r-- 11k ces 5 Oct 11:09 -- README.md
.rw-r--r-- 6.1k ces 4 Oct 15:24 -N TESTING.md
  • icons
  • Git status
  • tree view
  • hyperlinks
  • themes

eza $FLAGS

Go on, flip some flags.

eza lists your files with colour, Git status, icons and a tree view. Toggle a flag and watch the listing change.

Toggle a flag

The listing is eza’s own repository.

~/src/ezaLive
~/src/ezaonmain
eza -lTh --level=2 --git --icons
~/src/ezaonmain
small and fast
One binary
Windows, macOS, Linux and BSDs
Everywhere
what it’s written in
Rust
free software
EUPL-1.2

eza --long features/

Everything ls never told you.

By deliberately making some decisions differently, eza attempts to be a more featureful, more user-friendly version of ls.

It knows about Git

Per-file status with --git, per-repository status with --git-repos.

> eza -l --git
.rw-r--r--  72k ces  4 Oct 11:11 -M Cargo.lock
.rw-r--r--  13k ces  5 Oct 11:09 M- flake.nix
.rw-r--r-- 6.1k ces  4 Oct 15:24 -N TESTING.md
drwxr-xr-x    - ces  4 Oct 20:13 -I .direnv

> eza -l --git-repos ~/src
drwxr-xr-x    - ces 10 Oct 11:31 | main   eza
drwxr-xr-x    - ces 11 Oct 09:49 | main   eza.rocks

A tree, built in

Recurse into directories as a tree, and limit the depth of recursion when it gets deep.

> eza --tree --level=2 docs
docs
├── images
│   └── screenshots.png
├── tapes
│   └── demo.tape
└── theme.yml

Dates for humans

Human readable relative dates, or any timestamp format you care to write.

> eza -l --time-style relative
.rw-r--r--  72k ces 6 days  Cargo.lock
.rw-r--r--  287 ces 1 week  Cargo.toml
drwxr-xr-x    - ces 1 week  crates
.rw-r--r--  14k ces 1 month LICENSE.txt
.rw-r--r--  11k ces 6 days  README.md

Links you can click

Display entries as hyperlinks, and open a file straight from the listing in any terminal that supports them.

> eza --hyperlink
Cargo.lock    flake.nix
Cargo.toml    INSTALL.md
CHANGELOG.md  LICENSE.txt
crates        README.md
docs          tests

Colours that mean something

It uses colours to distinguish file types and metadata, so you can tell what a thing is before you read its name.

  • cratesdirectory
  • Cargo.tomlbuild file
  • screenshots.pngimage
  • CHANGELOG.mdsymlink
  • demo.tapeeverything else
-M, --mounts
Show mount details, on Linux and macOS.
-Z, --context
List each file’s security context.
-@, --extended
List each file’s extended attributes and sizes.
--total-size
Show recursive directory size.

eza --oneline install/

In a package manager near you.

eza is available for Windows, macOS, Linux and BSDs. Pick how you install things and copy the line.

Cargoany platform

cargo install eza

Builds the eza binary from crates.io. You’ll need a Rust environment set up.

Just want a look first? With Nix flakes: nix run github:eza-community/eza

Every install method and shell completions, in INSTALL.md

man eza

eza’s options are almost, but not quite, entirely unlike ls’s.

Full man pages

Display options

-1, --oneline
display one entry per line
-G, --grid
display entries as a grid (default)
-l, --long
display extended details and attributes
-R, --recurse
recurse into directories
-T, --tree
recurse into directories as a tree
-x, --across
sort the grid across, rather than downwards
-F, --classify=(when)
display type indicator by file names
--colo[u]r=(when)
when to use terminal colours
--colo[u]r-scale=(field)
highlight levels of field distinctly (all, age, size)
--color-scale-mode=(mode)
use gradient or fixed colours in --color-scale
--icons=(when)
when to display icons
--hyperlink=(when)
when to display entries as hyperlinks
--absolute=(mode)
display entries with their absolute path
-w, --width=(columns)
set screen width in columns

Filtering options

-a, --all
show hidden and ‘dot’ files
-d, --treat-dirs-as-files
list directories like regular files
-L, --level=(depth)
limit the depth of recursion
-r, --reverse
reverse the sort order
-s, --sort=(field)
which field to sort by
--group-directories-first
list directories before other files
--group-directories-last
list directories after other files
-D, --only-dirs
list only directories
-f, --only-files
list only files
--no-symlinks
don’t show symbolic links
--show-symlinks
explicitly show links alongside --only-dirs or --only-files
--git-ignore
ignore files mentioned in .gitignore
-I, --ignore-glob=(globs)
glob patterns (pipe-separated) of files to ignore

Long view options

-b, --binary
list file sizes with binary prefixes
-B, --bytes
list file sizes in bytes, without any prefixes
-g, --group
list each file’s group
--smart-group
show the group only if it differs from the owner
-h, --header
add a header row to each column
-H, --links
list each file’s number of hard links
-i, --inode
list each file’s inode number
-m, --modified
use the modified timestamp field
-M, --mounts
show mount details (Linux and macOS only)
-S, --blocksize
show size of allocated file system blocks
-t, --time=(field)
which timestamp field to use
-u, --accessed
use the accessed timestamp field
-U, --created
use the created timestamp field
-X, --dereference
dereference symlinks for file information
-Z, --context
list each file’s security context
-@, --extended
list each file’s extended attributes and sizes
--changed
use the changed timestamp field
--git
list each file’s Git status, if tracked or ignored
--git-repos
list each directory’s Git status, if tracked
--git-repos-no-status
list whether a directory is a Git repository, but not its status (faster)
--no-git
suppress Git status
--time-style=(style)
how to format timestamps: default, iso, long-iso, full-iso, relative, or +FORMAT
--total-size
show recursive directory size
--no-permissions
suppress the permissions field
-o, --octal-permissions
list each file’s permission in octal format
--no-filesize
suppress the filesize field
--no-user
suppress the user field
--no-time
suppress the time field
--stdin
read file names from stdin

$EDITOR ~/.config/eza/theme.yml

Make it yours.

Every colour and every icon can be set in a theme.yml. Your existing LS_COLORS and EXA_COLORS keep working, and take precedence.

# docs/theme.yml
filekinds:
  directory:
    foreground: Blue
  symlink:
    foreground: Cyan
perms:
  user_read:
    foreground: Yellow
    is_bold: true
> eza -l crates/eza
drwxr-xr-x    - ces  3 Oct 23:18 benches
.rw-r--r-- 3.7k ces  3 Oct 23:18 build.rs
.rw-r--r-- 2.2k ces  2 Oct 22:53 Cargo.toml
lrwxrwxrwx    - ces  3 Oct 23:18 CHANGELOG.md -> ../../CHANGELOG.md
drwxr-xr-x    - ces  3 Oct 23:18 src

Pre-made themes, and room for yours: eza-community/eza-themes

git diff exa eza

Coming from exa?

eza is the maintained, community fork of exa, and a good deal has been added since. This list is non-exhaustive.

@@ features not in exa @@

  • Fixes “The Grid Bug” introduced in exa 2021.
  • Hyperlink support.
  • Mount point details.
  • SELinux context output.
  • Git repo status output.
  • Human readable relative dates.
  • Several security fixes.
  • Support for bright terminal colours.
  • A theme.yml file for customising colours and icons.
  • Many smaller bug fixes and changes!
  • ...and like, so much more that it became exhausting to update this all the time. Like seriously, we have a lot of good stuff.

ezarocks.

Small, fast, and just one single binary.