2020-10-13 20:50:27 +00:00
< div align = "center" >
2021-08-12 15:18:56 +00:00
2023-07-29 12:09:05 +00:00
# eza
2014-05-22 12:55:11 +00:00
2023-07-30 06:11:15 +00:00
eza is a modern, maintained replacement for ls, built on [exa ](https://github.com/ogham/exa ).
2014-06-28 11:20:50 +00:00
2020-10-13 20:50:27 +00:00
**README Sections:** [Options ](#options ) — [Installation ](#installation ) — [Development ](#development )
2018-10-21 11:56:09 +00:00
2023-07-30 06:11:15 +00:00
[![Built with Nix ](https://img.shields.io/badge/Built_With-Nix-5277C3.svg?logo=nixos&labelColor=73C3D5 )](https://nixos.org)
2023-09-06 19:45:27 +00:00
[![Contributor Covenant ](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg )](CODE_OF_CONDUCT.md)
2023-08-23 17:06:47 +00:00
< a href = "https://matrix.to/#/#eza:gitter.im" > < img alt = "Gitter" src = "https://img.shields.io/gitter/room/eza-community/eza?logo=element&link=https%3A%2F%2Fapp.gitter.im%2F%23%2Froom%2F%23eza%3Agitter.im&link=Gitter%20matrix%20room%20for%20Eza" > < / a >
2023-07-30 10:59:57 +00:00
2023-08-14 14:40:01 +00:00
[![Unit tests ](https://github.com/eza-community/eza/actions/workflows/unit-tests.yml/badge.svg )](https://github.com/eza-community/eza/actions/workflows/unit-tests.yml)
2023-07-30 11:02:19 +00:00
![Crates.io ](https://img.shields.io/crates/v/eza?link=https%3A%2F%2Fcrates.io%2Fcrates%2Feza )
2023-08-14 14:40:01 +00:00
![Crates.io ](https://img.shields.io/crates/l/eza?link=https%3A%2F%2Fgithub.com%2Feza-community%2Feza%2Fblob%2Fmain%2FLICENCE )
2023-07-30 10:59:57 +00:00
2020-10-13 20:50:27 +00:00
< / div >
2014-05-22 12:55:11 +00:00
2023-07-30 09:43:12 +00:00
![Screenshots of eza ](screenshots.png )
2014-06-28 11:20:50 +00:00
2020-10-13 20:50:27 +00:00
---
2023-07-30 06:11:15 +00:00
**eza** is a modern, maintained replacement for the venerable file-listing command-line program `ls` that ships with Unix and Linux operating systems, giving it more features and better defaults.
2020-10-13 20:50:27 +00:00
It uses colours to distinguish file types and metadata.
It knows about symlinks, extended attributes, and Git.
And it’ s **small** , **fast** , and just **one single binary** .
2023-07-29 12:09:05 +00:00
By deliberately making some decisions differently, eza attempts to be a more featureful, more user-friendly version of `ls` .
2020-10-13 20:50:27 +00:00
2014-12-12 15:15:35 +00:00
2023-07-30 06:17:39 +00:00
---
**eza** features not in exa (non-exhaustive):
2020-10-13 20:50:27 +00:00
2023-08-14 14:40:01 +00:00
- Fixes [“The Grid Bug” ](https://github.com/eza-community/eza/issues/66#issuecomment-1656758327 ) introduced in exa 2021.
2023-07-30 06:17:39 +00:00
- Hyperlink support.
2023-09-05 12:26:45 +00:00
- Mount point details.
2023-07-30 06:17:39 +00:00
- Selinux context output.
- Git repo status output.
- Human readable relative dates.
2023-09-08 14:00:08 +00:00
- Several security fixes.
2023-07-30 06:17:39 +00:00
- Many smaller bug fixes/changes!
2023-09-10 17:20:14 +00:00
- Support for `bright` terminal colours.
2020-10-13 20:50:27 +00:00
---
2014-06-28 11:20:50 +00:00
2023-07-29 16:44:32 +00:00
< a id = "try-it" >
< h1 > Try it!< / h1 >
< / a >
2023-07-29 16:48:45 +00:00
### Nix ❄️
2023-07-29 16:44:32 +00:00
If you already have Nix setup with flake support, you can try out eza with the `nix run` command:
2023-08-14 14:40:01 +00:00
nix run github:eza-community/eza
2023-07-29 16:44:32 +00:00
2023-07-29 16:46:44 +00:00
Nix will build eza and run it.
2023-07-29 16:45:30 +00:00
2023-08-14 14:40:01 +00:00
If you want to pass arguments this way, use e.g. `nix run github:eza-community/eza -- -ol` .
2023-07-29 16:44:32 +00:00
< a id = "installation" >
< h1 > Installation< / h1 >
< / a >
2023-09-06 18:24:48 +00:00
eza is available for Windows, macOS and Linux.
2023-07-29 16:44:32 +00:00
2023-07-30 12:20:29 +00:00
### Cargo (crates.io)
2023-07-30 12:18:59 +00:00
![Crates.io ](https://img.shields.io/crates/v/eza?link=https%3A%2F%2Fcrates.io%2Fcrates%2Feza )
2023-07-29 16:44:32 +00:00
If you already have a Rust environment set up, you can use the `cargo install` command:
cargo install eza
2023-07-30 12:18:59 +00:00
Cargo will build the `eza` binary and place it in `$HOME/.local/share/cargo/bin/eza` .
2023-07-29 16:44:32 +00:00
2023-07-30 12:20:29 +00:00
### Cargo (git)
2023-07-29 16:44:32 +00:00
2023-07-30 12:18:59 +00:00
If you already have a Rust environment set up, you can use the `cargo install` command in your local clone of the repo:
2023-08-14 14:40:01 +00:00
git clone https://github.com/eza-community/eza.git
2023-07-30 12:20:29 +00:00
cd eza
2023-07-30 12:18:59 +00:00
cargo install --path .
Cargo will build the `eza` binary and place it in `$HOME/.cargo` .
2023-07-29 16:44:32 +00:00
2023-08-07 15:16:56 +00:00
### Arch Linux
2023-09-07 10:57:54 +00:00
[![Arch Linux package ](https://repology.org/badge/version-for-repo/arch/eza.svg )](https://repology.org/project/eza/versions)
Eza is available in the [\[extra\]](https://archlinux.org/packages/extra/x86_64/eza/) repository of Arch Linux.
```bash
pacman -S eza
```
2023-08-07 15:16:56 +00:00
2023-09-06 18:24:48 +00:00
### Debian and Ubuntu
2023-09-07 10:57:54 +00:00
2023-09-06 18:24:48 +00:00
Eza is available from [deb.gierens.de ](http://deb.gierens.de ). The GPG public
key is in this repo under [deb.asc ](/deb.asc ).
To install eza from this repo use:
```bash
2023-09-12 16:34:32 +00:00
wget -qO- https://raw.githubusercontent.com/eza-community/eza/main/deb.asc | sudo tee /etc/apt/trusted.gpg.d/gierens.asc
2023-09-06 18:24:48 +00:00
echo "deb http://deb.gierens.de stable main" | sudo tee /etc/apt/sources.list.d/gierens.list
sudo apt update
sudo apt install -y eza
```
2023-09-12 16:34:32 +00:00
**Note:** on some systems like Docker containers apt might require the key
to be in dearmored format, then use this command instead:
```bash
wget -qO- https://raw.githubusercontent.com/eza-community/eza/main/deb.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/gierens.asc
```
before proceeding with the others from above.
2023-09-06 18:24:48 +00:00
### Nix (Linux, MacOS)
2023-09-07 10:57:54 +00:00
2023-08-07 15:16:56 +00:00
[![nixpkgs unstable package ](https://repology.org/badge/version-for-repo/nix_unstable/eza.svg )](https://repology.org/project/eza/versions)
Eza is available from [Nixpkgs ](https://github.com/NixOS/nixpkgs ).
For `nix profile` users:
```shell
nix profile install nixpkgs#eza
```
For `nix-env` users:
```shell
nix-env -i eza
```
2023-09-12 02:46:21 +00:00
### Gentoo
[![Gentoo package ](https://repology.org/badge/version-for-repo/gentoo/eza.svg )](https://repology.org/project/eza/versions)
2023-09-12 05:41:40 +00:00
On Gentoo, eza is available as a package [`sys-apps/eza` ](https://packages.gentoo.org/packages/sys-apps/eza ):
2023-09-12 02:46:21 +00:00
```bash
emerge --ask sys-apps/eza
```
2023-09-12 18:47:04 +00:00
### openSUSE
Eza is available at [openSUSE:Factory/eza ](https://build.opensuse.org/package/show/openSUSE:Factory/eza ):
```bash
zypper ar https://download.opensuse.org/tumbleweed/repo/oss/ factory-oss
zypper in eza
```
The preceding repository also contains the Bash, Fish, and Zsh completions.
### Fedora
You can install Eza from [openSUSE:Factory/eza ](https://build.opensuse.org/package/show/openSUSE:Factory/eza ):
```bash
tee /etc/yum.repos.d/opensuse-tumbleweed-oss.repo < < EOL
[opensuse-tumbleweed-oss]
name=OpenSUSE Tumbleweed OSS
baseurl=https://download.opensuse.org/tumbleweed/repo/oss/
enabled=1
gpgcheck=1
gpgkey=https://download.opensuse.org/tumbleweed/repo/oss/repodata/repomd.xml.key
EOL
dnf install eza
```
The preceding repository also contains the Bash, Fish, and Zsh completions.
2023-09-06 18:24:48 +00:00
### Brew (MacOS)
2023-08-18 09:15:33 +00:00
2023-09-06 18:24:48 +00:00
[![Homebrew package ](https://repology.org/badge/version-for-repo/homebrew/eza.svg )](https://repology.org/project/eza/versions)
Eza is available from [Homebrew ](https://formulae.brew.sh/formula/eza#default ).
2023-08-07 15:16:56 +00:00
2023-09-06 18:24:48 +00:00
To install eza, run:
```shell
brew install eza
```
2023-08-07 15:16:56 +00:00
2023-09-11 23:32:51 +00:00
### MacPorts (macOS)
[![MacPorts port ](https://repology.org/badge/version-for-repo/macports/eza.svg )](https://repology.org/project/eza/versions)
On macOS, eza is also available via [MacPorts ](https://ports.macports.org/port/eza/ ).
To install eza, run:
```shell
sudo port install eza
```
2023-09-13 16:32:47 +00:00
### Scoop (Windows)
[![Windows package ](https://repology.org/badge/version-for-repo/scoop/eza.svg )](https://repology.org/project/eza/versions)
Eza is available from [Scoop ](https://scoop.sh/#/apps?q=eza&id=a52070d25f94bbcc884f80bef53eb47ed1268198 ).
To install eza, run:
```shell
scoop install eza
```
2020-10-13 20:50:27 +00:00
---
2023-07-30 12:23:56 +00:00
Click sections to expand.
2020-10-13 20:50:27 +00:00
< a id = "options" >
2023-07-30 06:11:15 +00:00
< details >
< summary > Command-line options < / summary >
2023-07-30 12:23:56 +00:00
2020-10-13 20:50:27 +00:00
< h1 > Command-line options< / h1 >
< / a >
2015-11-19 13:21:49 +00:00
2023-07-29 12:09:05 +00:00
eza’ s options are almost, but not quite, entirely unlike `ls` ’ s.
2020-10-13 20:50:27 +00:00
### Display options
2015-11-19 13:21:49 +00:00
- **-1**, ** --oneline**: display one entry per line
2017-05-06 22:00:45 +00:00
- **-G**, ** --grid**: display entries as a grid (default)
2015-11-19 13:21:49 +00:00
- **-l**, ** --long**: display extended details and attributes
- **-R**, ** --recurse**: recurse into directories
2017-05-06 22:00:45 +00:00
- **-T**, ** --tree**: recurse into directories as a tree
- **-x**, ** --across**: sort the grid across, rather than downwards
2019-11-12 00:18:51 +00:00
- **-F**, ** --classify**: display type indicator by file names
2017-05-06 22:00:45 +00:00
- **--colo[u]r**: when to use terminal colours
- **--colo[u]r-scale**: highlight levels of file sizes distinctly
2019-11-12 00:18:51 +00:00
- **--icons**: display icons
2021-02-27 20:48:00 +00:00
- **--no-icons**: don't display icons (always overrides --icons)
2023-04-12 04:51:06 +00:00
- **--hyperlink**: display entries as hyperlinks
2023-08-12 20:31:15 +00:00
- **-w**, ** --width=(columns)**: set screen width in columns
2015-05-07 15:53:20 +00:00
2020-10-13 20:50:27 +00:00
### Filtering options
2015-05-07 15:53:20 +00:00
2017-06-29 12:24:55 +00:00
- **-a**, ** --all**: show hidden and 'dot' files
2017-05-06 22:00:45 +00:00
- **-d**, ** --list-dirs**: 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
2015-11-19 13:21:49 +00:00
- **--group-directories-first**: list directories before other files
2018-10-26 23:41:27 +00:00
- **-D**, ** --only-dirs**: list only directories
2017-09-27 12:46:36 +00:00
- **--git-ignore**: ignore files mentioned in `.gitignore`
2016-10-30 14:47:38 +00:00
- **-I**, ** --ignore-glob=(globs)**: glob patterns (pipe-separated) of files to ignore
2015-05-07 15:53:20 +00:00
2017-06-29 12:24:55 +00:00
Pass the `--all` option twice to also show the `.` and `..` directories.
2020-10-13 20:50:27 +00:00
### Long view options
2015-05-07 15:53:20 +00:00
2020-10-13 20:50:27 +00:00
These options are available when running with `--long` (`-l`):
2015-05-07 15:53:20 +00:00
2017-05-06 22:00:45 +00:00
- **-b**, ** --binary**: list file sizes with binary prefixes
- **-B**, ** --bytes**: list file sizes in bytes, without any prefixes
2020-10-13 20:50:27 +00:00
- **-g**, ** --group**: list each file’ s group
2017-05-06 22:00:45 +00:00
- **-h**, ** --header**: add a header row to each column
2020-10-13 20:50:27 +00:00
- **-H**, ** --links**: list each file’ s number of hard links
- **-i**, ** --inode**: list each file’ s inode number
2017-05-06 22:00:45 +00:00
- **-m**, ** --modified**: use the modified timestamp field
2023-09-05 12:26:45 +00:00
- **-M**, ** --mounts**: Show mount details (Linux only).
2023-08-13 20:56:50 +00:00
- **-S**, ** --blocksize**: show size of allocated file system blocks
2017-05-06 22:00:45 +00:00
- **-t**, ** --time=(field)**: which timestamp field to use
- **-u**, ** --accessed**: use the accessed timestamp field
- **-U**, ** --created**: use the created timestamp field
2022-10-17 05:39:39 +00:00
- **-X**, ** --dereference**: dereference symlinks for file information
2021-04-25 13:00:58 +00:00
- **-Z**, ** --context**: list each file’ s security context
2020-10-13 20:50:27 +00:00
- **-@**, ** --extended**: list each file’ s extended attributes and sizes
2019-11-12 00:18:51 +00:00
- **--changed**: use the changed timestamp field
2020-10-13 20:50:27 +00:00
- **--git**: list each file’ s Git status, if tracked or ignored
2023-08-28 08:07:46 +00:00
- **--no-git**: suppress Git status (always overrides `--git` , `--git-repos` , `--git-repos-no-status` )
2017-07-05 23:52:27 +00:00
- **--time-style**: how to format timestamps
2019-08-29 12:34:30 +00:00
- **--no-permissions**: suppress the permissions field
2023-02-23 22:57:54 +00:00
- **-o**, ** --octal-permissions**: list each file's permission in octal format
2019-08-29 12:34:30 +00:00
- **--no-filesize**: suppress the filesize field
- **--no-user**: suppress the user field
- **--no-time**: suppress the time field
2017-05-06 22:00:45 +00:00
2020-10-13 20:50:27 +00:00
Some of the options accept parameters:
2017-05-06 22:00:45 +00:00
- Valid ** --color** options are **always** , **automatic** , and **never** .
2018-12-17 04:46:50 +00:00
- Valid sort fields are **accessed** , **changed** , **created** , **extension** , **Extension** , **inode** , **modified** , **name** , **Name** , **size** , **type** , and **none** . Fields starting with a capital letter sort uppercase before lowercase. The modified field has the aliases **date** , **time** , and **newest** , while its reverse has the aliases **age** and **oldest** .
- Valid time fields are **modified** , **changed** , **accessed** , and **created** .
2022-04-30 12:38:45 +00:00
- Valid time styles are **default** , **iso** , **long-iso** , **full-iso** , and **relative** .
2016-01-07 06:58:14 +00:00
2023-07-30 06:11:15 +00:00
< / details >
2020-10-13 20:50:27 +00:00
< a id = "development" >
2023-07-30 06:11:15 +00:00
< details >
< summary > Development < / summary >
2020-10-13 20:50:27 +00:00
< h1 > Development
2023-03-01 03:41:51 +00:00
< a href = "https://blog.rust-lang.org/2022/08/11/Rust-1.63.0.html" >
< img src = "https://img.shields.io/badge/rustc-1.63.0+-lightgray.svg" alt = "Rust 1.63.0+" / >
2020-10-13 20:50:27 +00:00
< / a >
2023-08-14 14:40:01 +00:00
< a href = "https://github.com/eza-community/eza/blob/master/LICENCE" >
2020-10-13 20:50:27 +00:00
< img src = "https://img.shields.io/badge/licence-MIT-green" alt = "MIT Licence" / >
< / a >
< / h1 > < / a >
2023-07-29 12:09:05 +00:00
eza is written in [Rust ](https://www.rust-lang.org/ ).
2021-08-12 14:46:37 +00:00
You will need rustc version 1.56.1 or higher.
2020-10-13 20:50:27 +00:00
The recommended way to install Rust for development is from the [official download page ](https://www.rust-lang.org/tools/install ), using rustup.
2023-07-29 12:09:05 +00:00
Once Rust is installed, you can compile eza with Cargo:
2020-10-13 20:50:27 +00:00
2022-01-14 23:25:27 +00:00
cargo build
cargo test
2020-10-13 20:50:27 +00:00
2020-10-14 21:20:37 +00:00
- The [just ](https://github.com/casey/just ) command runner can be used to run some helpful development commands, in a manner similar to `make` .
2022-04-01 13:26:51 +00:00
Run `just --list` to get an overview of what’ s available.
2020-10-13 20:50:27 +00:00
2020-10-14 21:20:37 +00:00
- If you are compiling a copy for yourself, be sure to run `cargo build --release` or `just build-release` to benefit from release-mode optimisations.
Copy the resulting binary, which will be in the `target/release` directory, into a folder in your `$PATH` .
`/usr/local/bin` is usually a good choice.
- To compile and install the manual pages, you will need [pandoc ](https://pandoc.org/ ).
The `just man` command will compile the Markdown into manual pages, which it will place in the `target/man` directory.
To use them, copy them into a directory that `man` will read.
`/usr/local/share/man` is usually a good choice.
2023-07-29 12:09:05 +00:00
- eza depends on [libgit2 ](https://github.com/rust-lang/git2-rs ) for certain features.
2020-10-13 20:50:27 +00:00
If you’ re unable to compile libgit2, you can opt out of Git support by running `cargo build --no-default-features` .
2020-10-14 21:20:37 +00:00
- If you intend to compile for musl, you will need to use the flag `vendored-openssl` if you want to get the Git feature working.
2020-10-13 20:50:27 +00:00
The full command is `cargo build --release --target=x86_64-unknown-linux-musl --features vendored-openssl,git` .
2023-07-29 17:01:08 +00:00
### Developing on Nix (experimental) ❄️
If you have a working Nix installation with flake support, you can use nix to manage your dev environment.
nix develop
The Nix Flake has a few features:
- Run `nix flake check` to run `treefmt` on the repo.
- Run `nix build` and manually test `./results/bin/eza -- <arguments>` for easy debugging.
- Run `nix build .#test` to run `cargo test` via the flake.
- Run `nix build .#clippy` to lint with clippy (still work in progress).
2020-10-13 20:50:27 +00:00
2023-09-07 14:43:59 +00:00
## Star History
[![Star History Chart ](https://api.star-history.com/svg?repos=eza-community/eza&type=Date )](https://star-history.com/#eza-community/eza& Date)