Top Related Projects
Quick Overview
Eza is a modern, maintained alternative to the ls
command-line utility. It provides a more feature-rich and colorful output for listing directory contents and file information. Eza is written in Rust and aims to be a drop-in replacement for ls
with additional functionality and improved performance.
Pros
- Colorful and visually appealing output
- Extensive feature set, including Git integration and extended file attributes
- Fast performance due to Rust implementation
- Active development and community support
Cons
- May require additional setup compared to the built-in
ls
command - Some users might find the default output too verbose
- Learning curve for users accustomed to traditional
ls
options - Dependency on Rust runtime (though binary releases are available)
Getting Started
To install eza on various systems:
# macOS (using Homebrew)
brew install eza
# Arch Linux
pacman -S eza
# Ubuntu/Debian (using cargo)
cargo install eza
# Windows (using Scoop)
scoop install eza
After installation, you can start using eza by replacing ls
commands with eza
:
# List files in the current directory
eza
# List files with details
eza -l
# Show hidden files and directories
eza -a
# Tree view of directory structure
eza --tree
For more advanced usage and options, refer to the eza documentation or run eza --help
.
Competitor Comparisons
A modern replacement for ‘ls’.
Pros of exa
- Established project with a longer history and wider adoption
- Simpler codebase, potentially easier for newcomers to contribute
- Lighter on system resources, especially for large directories
Cons of exa
- No longer actively maintained, with the last commit in 2021
- Lacks some advanced features and customization options
- Limited icon support compared to eza
Code Comparison
exa:
pub fn print_dir(dir: &Dir, options: &Options) -> io::Result<()> {
let mut files = Vec::new();
for entry in dir.files() {
files.push(entry?);
}
// ... (sorting and filtering logic)
for file in files {
println!("{}", file.file_name().to_string_lossy());
}
Ok(())
}
eza:
pub fn print_dir(dir: &Dir, options: &Options) -> io::Result<()> {
let mut files = dir.files().collect::<io::Result<Vec<_>>>()?;
// ... (sorting and filtering logic)
for file in files {
let display = file.display(options);
println!("{}", display);
}
Ok(())
}
The code comparison shows that eza has a more streamlined approach to collecting files and uses a dedicated display
method for formatting output, potentially offering more flexibility in customization.
A syntax-highlighting pager for git, diff, grep, and blame output
Pros of delta
- Specialized for git diff output, offering enhanced syntax highlighting and side-by-side diffs
- Supports various output formats, including line numbers and git-style output
- Customizable themes and color schemes for better visual differentiation
Cons of delta
- Limited to diff and log viewing, not a general-purpose file listing tool
- May require additional configuration to integrate with git workflows
- Potentially slower for large diffs due to advanced processing features
Code comparison
delta:
let config = Config::from_env()?;
let mut painter = Painter::new(&config);
painter.paint_buffered(input)?;
eza:
let options = Options::parse();
let fs = FileSystem::new(options.dereference);
let tree = fs.scan_tree(paths, &options)?;
Summary
Delta is a specialized tool for enhancing git diff output with advanced features like syntax highlighting and side-by-side diffs. It offers customizable themes and various output formats. However, it's limited to diff viewing and may require additional setup.
Eza, on the other hand, is a modern replacement for the ls
command, providing colorized file listings with extended attributes. It's more versatile for general file system navigation but lacks the specialized diff viewing capabilities of Delta.
Choose Delta for improved git diff experiences, and Eza for enhanced file listing and exploration.
ripgrep recursively searches directories for a regex pattern while respecting your gitignore
Pros of ripgrep
- Faster search performance, especially for large codebases
- More advanced regex support and search options
- Cross-platform compatibility (Windows, macOS, Linux)
Cons of ripgrep
- Limited to text search functionality
- Steeper learning curve for advanced features
- Less visually appealing output compared to eza's colorful listings
Code Comparison
eza example:
eza -la --git
ripgrep example:
rg -i 'pattern' --type-add 'web:*.{html,css,js}' --type web
Key Differences
- Purpose: eza is a modern replacement for
ls
, while ripgrep is a fast search tool similar togrep
- Output: eza provides colorful and detailed file listings, ripgrep focuses on efficient text search results
- Use case: eza is best for file system navigation and information, ripgrep excels at searching file contents
Performance
- ripgrep generally outperforms eza in search operations
- eza may be faster for simple directory listings
Community and Development
- Both projects have active communities and regular updates
- ripgrep has a larger user base and more contributors
- eza (formerly exa) has recently transitioned to community maintenance
Integration
- ripgrep integrates well with text editors and IDEs for code search
- eza is commonly used in shell scripts and command-line workflows
A simple, fast and user-friendly alternative to 'find'
Pros of fd
- Faster search performance, especially for large directories
- More intuitive and user-friendly syntax compared to traditional
find
command - Built-in smart case sensitivity and parallel command execution
Cons of fd
- Limited to file and directory search, lacks advanced file listing features
- Does not provide detailed file information or colorized output by default
- Less customizable in terms of output format and display options
Code Comparison
fd:
fd -e txt
fd '^foo.*bar$'
fd -exec rm {}
eza:
eza -l --sort=size
eza --tree --level=2
eza -T -L 2 --git-ignore
Summary
fd excels in fast file searching with a simple syntax, making it ideal for quickly locating files and directories. eza, on the other hand, focuses on enhanced file listing capabilities, offering rich output formats and Git integration. While fd is more specialized for search operations, eza provides a more comprehensive replacement for the traditional ls
command with additional features for file system exploration and information display.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
eza is a modern alternative for the venerable file-listing command-line program ls
that ships with Unix and Linux operating systems, giving it more features and better defaults.
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.
By deliberately making some decisions differently, eza attempts to be a more featureful, more user-friendly version of ls
.
eza features not in exa (non-exhaustive):
- 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. - Many smaller bug fixes/changes!
- Configuration
theme.yml
file for customization of colors and icons.
...and like, so much more that it became exhausting to update this all the time. Like seriously, we have a lot of good stuff.
Try it!
Nix âï¸
If you already have Nix setup with flake support, you can try out eza with the nix run
command:
nix run github:eza-community/eza
Nix will build eza and run it.
If you want to pass arguments this way, use e.g. nix run github:eza-community/eza -- -ol
.
Installation
eza is available for Windows, macOS and Linux. Platform and distribution specific installation instructions can be found in INSTALL.md.
Command-line options
ezaâs options are almost, but not quite, entirely unlike ls
âs. Quick overview:
Display options
Click to expand
- -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 (always, auto, never)
- --colo[u]r=(when): when to use terminal colours (always, auto, never)
- --colo[u]r-scale=(field): highlight levels of
field
distinctly(all, age, size) - --color-scale-mode=(mode): use gradient or fixed colors in --color-scale. valid options are
fixed
orgradient
- --icons=(when): when to display icons (always, auto, never)
- --hyperlink: display entries as hyperlinks
- --absolute=(mode): display entries with their absolute path (on, follow, off)
- -w, --width=(columns): set screen width in columns
Filtering options
Click to expand
- -a, --all: show hidden and 'dot' files
- -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
- --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 (with
--only-dirs
,--only-files
, to show symlinks that match the filter) - --git-ignore: ignore files mentioned in
.gitignore
- -I, --ignore-glob=(globs): glob patterns (pipe-separated) of files to ignore
Pass the --all
option twice to also show the .
and ..
directories.
Long view options
Click to expand
These options are available when running with --long
(-l
):
- -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
- -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 (always overrides
--git
,--git-repos
,--git-repos-no-status
) - --time-style: how to format timestamps. valid timestamp styles are â
default
â, âiso
â, âlong-iso
â, âfull-iso
â, ârelative
â, or a custom style â+<FORMAT>
â (E.g., â+%Y-%m-%d %H:%M
â => â2023-09-30 13:00
â. For more specifications on the format string, see theeza(1)
manual page and chrono documentation.). - --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
Some of the options accept parameters:
- Valid --colo[u]r options are always, automatic (or auto for short), and never.
- 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.
- Valid time styles are default, iso, long-iso, full-iso, and relative.
See the man
pages for further documentation of usage. They are available
- online in the repo
- in your terminal via
man eza
, as of version[0.18.13] - 2024-04-25
Custom Themes
Click to expand
Eza has recently added support for a theme.yml
file, where you can specify all of the existing theme-ing options
available for the LS_COLORS
and EXA_COLORS
environment variables, as well as the option to specify different icons
for different file types and extensions. Any existing environment variables set will continue to work and will take
precedence for backwards compatibility.
New Pre-made themes
Check out the themes available in the official eza-themes repository, or contribute your own.
An example theme file is available in docs/theme.yml
, and needs to either be placed in a directory specified by the
environment variable EZA_CONFIG_DIR
, or will looked for by default in $XDG_CONFIG_HOME/eza
.
Full details are available on the man page and an example theme file is included here
Hacking on eza
If you wanna contribute to eza, firstly, you're expected to follow our code of conduct. After having understood the code of conduct, you can have a look at our CONTRIBUTING.md for more info about actual hacking.
Top Related Projects
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot