A modern, vibrant (but not overly), and multi-threaded file-tree visualizer and disk usage analyzer that respects hidden files and .gitignore
rules - basically if tree
and du
had a baby.
Erdtree is a modern alternative to the ancient tree command in that it:
- offers a minimal and user-friendly CLI
- respects hidden files and
.gitignore
rules by default - displays file sizes in human-readable format by default
- traverses directories in a parallel manner (4 threads by default)
- displays files using ANSI colors by default
$ erdtree -h
File tree visualizer and disk usage analyzer.
Usage: erdtree [OPTIONS] [DIR]
Arguments:
[DIR] Root directory to traverse; defaults to current working directory
Options:
-i, --ignore-git-ignore Ignore .gitignore; disabled by default
-m, --max-depth <NUM> Maximum depth to display
-n, --num-threads <NUM_THREADS> Number of threads to use [default: 4]
-o, --order <ORDER> Sort order to display directory content [default: none] [possible values: filename, size, none]
-s, --show-hidden Whether to show hidden files; disabled by default
-h, --help Print help (see more with '--help')
-V, --version Print version
- Make sure you have Rust and its toolchain installed.
$ cargo install --git https://github.com/solidiquis/erdtree
- The executable should then be located in
$HOME/.cargo/bin/
.
Other means of installation to come.
As recommended in IEC 80000-13, this command will report sizes
using SI units rather than binary units. As such you can expect 1KB = 1000B
and not 1KiB = 1024B
.
Additionally:
- A directory will have a size equal to the sum of the sizes of all of its entries. The size of the directory itself is negligble and isn't taken into account.
- Files other than directories and regular files (symbolic links, named pipes, sockets, etc.) appear but their memory sizes are not reported.
- Symbolic links to directories appear but are not traversed; their sizes are also not reported
Files that don't have read persmissions will appear but won't have their disk sizes reported. If they are directories they will not be traversed. Additionally, their size will not be included in their parent directory's total.
Files are printed in ANSI colors specified according to the LS_COLORS
environment variable on GNU/Linux systems. In its absence a default value is used.
Note for MacOS: MacOS uses the LSCOLORS
environment variable to determine file colors for the ls
command which is formatted very differently from LS_COLORS
. MacOS systems will fall back on the aforementioned default value unless the user defines their own LS_COLORS
environment variable.
This is not a rewrite of the tree
command thus it should not be considered a 1-to-1 port. The basic idea is the same: Display the file-tree of the specified directory. There are, however, key fundamental differences under the hood with regard to how file sizes are computed, traversal method, hidden files and .gitignore
rules, and printing.
Exa is a powerful modern equivalent of the ls
command which gives the option to print a tree-view of a specified directory, however the primary differences between exa --tree
and erdtree
are:
exa --tree --git-ignore
doesn't respect.gitignore
rules on a per directory basis whereaserdtree
does. Withexa
the root's.gitignore
is considered, but if child directories have their own.gitignore
they are disregarded and all of their contents will be printed.erdtree
displays the total size of a directory as the sum of all of its file sizes whereasexa
does not support this. This makes sorting directories in the tree-view by size dubious and unclear. Below are screenshots comparing equivalent usages oferdtree
andexa
, using long option names for clarity.
Happy to accept contributions but please keep the following in mind:
- If you're doing some minor refactoring and/or code cleanup feel free to just submit a PR.
- If you'd like to add a feature and/or make fundamental changes to
erdtree
's traverse algorithm please open up an issue and get my approval first. - Feature adds require tests.
Feature requests in the form of issues in general are welcome.
Q: Why did you make this? It's totally unnecessary.
A: Ennui.
Q: Why is it called Erdtree?
A: It's a reference to Elden Ring.
Q: Is it any good?
A: Yes.
Q: Is it blazingly fast?
A: Should be. I wrote it in Rust.