A modern replacement for ‘ls’.

Overview

exa

exa is a modern replacement for ls.

README Sections: OptionsInstallationDevelopment

Build status Say thanks!

Screenshots of exa


exa is a modern 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. 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, exa attempts to be a more featureful, more user-friendly version of ls. For more information, see exa’s website.


Command-line options

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

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: display type indicator by file names
  • --colo[u]r: when to use terminal colours
  • --colo[u]r-scale: highlight levels of file sizes distinctly
  • --icons: display icons

Filtering options

  • -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
  • -D, --only-dirs: list only directories
  • --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

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
  • -S, --blocks: list each file’s number of 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
  • -@, --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
  • --time-style: how to format timestamps
  • --no-permissions: suppress the permissions field
  • --no-filesize: suppress the filesize field
  • --no-user: suppress the user field
  • --no-time: suppress the time field

Some of the options accept parameters:

  • Valid --color options are always, automatic, 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, and full-iso.

Installation

exa is available for macOS and Linux. More information on how to install exa is available on the Installation page.

Alpine Linux

On Alpine Linux, enable community repository and install the exa package.

$ apk add exa

Arch Linux

On Arch, install the exa package.

$ pacman -S exa

Debian

On Debian, install the exa package. For now, exa is in the unstable repository.

$ apt install exa

Fedora

On Fedora, install the exa package.

$ dnf install exa

Gentoo

On Gentoo, install the sys-apps/exa package.

$ emerge sys-apps/exa

Homebrew

If you’re using Homebrew on macOS, install the exa formula.

$ brew install exa

MacPorts

If you're using MacPorts on macOS, install the exa port.

$ port install exa

Nix

On nixOS, install the exa package.

$ nix-env -i exa

openSUSE

On openSUSE, install the exa package.

$ zypper install exa

Ubuntu

On Ubuntu 20.10 (Groovy Gorilla) and later, install the exa package.

$ apt install exa

Void Linux

On Void Linux, install the exa package.

$ xbps-install -S exa

Manual installation from GitHub

Compiled binary versions of exa are uploaded to GitHub when a release is made. You can install exa manually by downloading a release, extracting it, and copying the binary to a directory in your $PATH, such as /usr/local/bin.

For more information, see the Manual Installation page.

Cargo

If you already have a Rust environment set up, you can use the cargo install command:

$ cargo install exa

Cargo will build the exa binary and place it in $HOME/.cargo.

To build without Git support, run cargo install --no-default-features exa is also available, if the requisite dependencies are not installed.


Development Rust 1.42+ MIT Licence

exa is written in Rust. You will need rustc version 1.42.0 or higher. The recommended way to install Rust for development is from the official download page, using rustup.

Once Rust is installed, you can compile exa with Cargo:

$ cargo build
$ cargo test
  • The just command runner can be used to run some helpful development commands, in a manner similar to make. Run just --tasks to get an overview of what’s available.

  • 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. 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.

  • exa depends on libgit2 for certain features. If you’re unable to compile libgit2, you can opt out of Git support by running cargo build --no-default-features.

  • 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. The full command is cargo build --release --target=x86_64-unknown-linux-musl --features vendored-openssl,git.

For more information, see the Building from Source page.

Testing with Vagrant

exa uses Vagrant to configure virtual machines for testing.

Programs such as exa that are basically interfaces to the system are notoriously difficult to test. Although the internal components have unit tests, it’s impossible to do a complete end-to-end test without mandating the current user’s name, the time zone, the locale, and directory structure to test. (And yes, these tests are worth doing. I have missed an edge case on many an occasion.)

The initial attempt to solve the problem was just to create a directory of “awkward” test cases, run exa on it, and make sure it produced the correct output. But even this output would change if, say, the user’s locale formats dates in a different way. These can be mocked inside the code, but at the cost of making that code more complicated to read and understand.

An alternative solution is to fake everything: create a virtual machine with a known state and run the tests on that. This is what Vagrant does. Although it takes a while to download and set up, it gives everyone the same development environment to test for any obvious regressions.

First, initialise the VM:

host$ vagrant up

The first command downloads the virtual machine image, and then runs our provisioning script, which installs Rust and exa’s build-time dependencies, configures the environment, and generates some awkward files and folders to use as test cases. Once this is done, you can SSH in, and build and test:

host$ vagrant ssh
vm$ cd /vagrant
vm$ cargo build
vm$ ./xtests/run
All the tests passed!

Of course, the drawback of having a standard development environment is that you stop noticing bugs that occur outside of it. For this reason, Vagrant isn’t a necessary development step — it’s there if you’d like to use it, but exa still gets used and tested on other platforms. It can still be built and compiled on any target triple that it supports, VM or no VM, with cargo build and cargo test.

Comments
  • Panic when `--long` is used

    Panic when `--long` is used

    # exa v0.8.0
    
    $ RUST_BACKTRACE=1 exa -l
    thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 0', /build/rust/src/rustc-1.33.0-src/src/libcore/slice/mod.rs:2455:10
    stack backtrace:
       0: <unknown>
       1: <unknown>
       2: <unknown>
       3: <unknown>
       4: <unknown>
       5: <unknown>
       6: <unknown>
       7: <unknown>
       8: <unknown>
       9: <unknown>
      10: <unknown>
      11: <unknown>
      12: <unknown>
      13: __libc_start_main
      14: <unknown>
    Aborted (core dumped)
    
    errors › runtime error 
    opened by pangteypiyush 27
  • Static binary downloaded from release not working, lacking libhttp_parser

    Static binary downloaded from release not working, lacking libhttp_parser

    I've downloaded the static binary of version v0.7.0 ( https://github.com/ogham/exa/releases/download/v0.7.0/exa-linux-x86_64-0.7.0.zip )

    I try to run the binary exa-linux-x86_64, and get the error: ./exa-linux-x86_64: error while loading shared libraries: libhttp_parser.so.2.1: cannot open shared object file: No such file or directory

    If I build exa myself with make, in the same system, the binary I've compiled works fine.

    opened by gabrielmagno 26
  • Git ignore filter

    Git ignore filter

    Exa already has some options for filtering files. I think filtering out files ignored in .gitignore files, as well as global exclude files, would be a great addition. Output from exa can become littered by uninteresting files like build directory contents or node_modules/. This is especially true when using the --tree option, which can have hundreds of lines of output.

    Here is a draft of the help text for the option I'm proposing:

    -g, --git-ignore   don't list files ignored by git
    

    Libgit2, which is already used by Exa, has a function for determining whether a files should be excluded or not. See the documentation for status_should_ignore.

    What do you think?

    features › git 
    opened by jacwah 26
  • Error on macOS Sierra Beta: malloc_zone_unregister

    Error on macOS Sierra Beta: malloc_zone_unregister

    For any directory with or without any options at all, exa reports this error:

    <br />exa(5617,0x7fff97ab33c0) malloc: *** malloc_zone_unregister() failed for 0x7fff97aa9000 <br />

    After which it doesn't exit until you press ^C. I have macOS v 10.12 Beta (16A285a), which is the Sierra Public Beta that came out very recently, so it may be related to that (especially because it worked in El Capitan before). I also use the fish shell, v 2.3.1. Any help would be greatly appreciated, and feel free to ask me for any other details.

    Thanks in advance, and exa is awesome!

    opened by ghost 24
  • Panicked at called Result::unwrap()

    Panicked at called Result::unwrap()

    I am using the exa version v0.9.0 on a MacOS Catalina 10.15.7

    Into a GIT project I am running into the following error, launching the command:

    ls

    thread '<unnamed>' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/libcore/result.rs:1084:5
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
    
    • Removing .git folder, the issue disappears
    • Launching exa -la, the issue disappears

    Thank you

    opened by davideprevosto 21
  • Cannot compile with latest Rust due to struct shorthand error

    Cannot compile with latest Rust due to struct shorthand error

    error: struct field shorthands are unstable (see issue #37340)
      --> /exa-d551ef44a896dca9/f54bc41/src/fs/dir.rs:45:18
       |
    45 |         Ok(Dir { contents, path, git })
       |                  ^^^^^^^^
    
    
    errors › build error 
    opened by evanworley 19
  • On the -T option

    On the -T option

    Playing with the (amazing) tree view, I've noticed a couple of places for improvement:

    • There is no Git information in this view.
    • It says Option --tree is useless without option --recurse. I think we could imply --recurse then.
    • It may be useful to pass an argument to -T limiting the nesting level, similarly to tree -L 2.
    feature request features › git 
    opened by vlad-shatskyi 16
  • Compilation errors on Ubuntu 12.04

    Compilation errors on Ubuntu 12.04

    $ rustc --version
    rustc 1.3.0-nightly (16f64c388 2015-07-09)
    $ git clone https://github.com/ogham/exa.git
    $ cd exa
    $ sudo make --install
    cargo build --release
       Compiling exa v0.3.0 (file:///home/alanb/src/git/hub/exa)
    src/feature/xattr_linux.rs:4:5: 4:22 warning: unused import, #[warn(unused_imports)] on by default
    src/feature/xattr_linux.rs:4 use std::ffi::CString;
                                     ^~~~~~~~~~~~~~~~~
    error: linking with `cc` failed: exit code: 1
    note: "cc" "-Wl,--as-needed" "-m64" "-L" "/usr/local/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/home/alanb/src/git/hub/exa/target/release/exa.0.o" "-o" "/home/alanb/src/git/hub/exa/target/release/exa" "-Wl,--whole-archive" "-l" "morestack" "-Wl,--no-whole-archive" "-Wl,--gc-sections" "-pie" "-Wl,-O1" "-nodefaultlibs" "-Wl,--whole-archive" "/tmp/rustc.O8V1ruSOlYpv/liblibgit2_sys-ee62f8ed694e2d9b.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustc.O8V1ruSOlYpv/liblibssh2_sys-197403f26ef746c2.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustc.O8V1ruSOlYpv/libopenssl_sys-f1940735b7e345d7.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustc.O8V1ruSOlYpv/libstd-74fa456f.rlib" "-Wl,--no-whole-archive" "-Wl,--whole-archive" "/tmp/rustc.O8V1ruSOlYpv/liballoc-74fa456f.rlib" "-Wl,--no-whole-archive" "-L" "/home/alanb/src/git/hub/exa/target/release" "-L" "/home/alanb/src/git/hub/exa/target/release/deps" "-L" "/home/alanb/src/git/hub/exa/target/release/build/libgit2-sys-ee62f8ed694e2d9b/out/lib" "-L" "/home/alanb/src/git/hub/exa/target/release/build/libssh2-sys-197403f26ef746c2/out/lib" "-L" "/usr/lib/x86_64-linux-gnu" "-L" "/home/alanb/src/git/hub/exa/target/release/build/libssh2-sys-197403f26ef746c2/out/lib" "-L" "/usr/lib/x86_64-linux-gnu" "-L" "/usr/lib/x86_64-linux-gnu" "-L" "/home/alanb/src/git/hub/exa/target/release/build/openssl-sys-f1940735b7e345d7/out" "-L" "/usr/local/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-L" "/home/alanb/src/git/hub/exa/.rust/lib/x86_64-unknown-linux-gnu" "-L" "/home/alanb/src/git/hub/exa/lib/x86_64-unknown-linux-gnu" "-Wl,-Bstatic" "-Wl,-Bdynamic" "-l" "rt" "-l" "ssl" "-l" "crypto" "-l" "dl" "-l" "z" "-l" "z" "-l" "ssl" "-l" "crypto" "-l" "c" "-l" "m" "-l" "dl" "-l" "pthread" "-l" "rt" "-l" "gcc_s" "-l" "pthread" "-l" "c" "-l" "m" "-l" "compiler-rt"
    note: /tmp/rustc.O8V1ruSOlYpv/liblibssh2_sys-197403f26ef746c2.rlib(lldb-fix-r-ssh2-channel.o): In function `_libssh2_channel_nextid':
    channel.c:(.text._libssh2_channel_nextid+0x0): multiple definition of `_libssh2_channel_nextid'
    #
    # many more warnings of multiple definitions
    #
    error: aborting due to previous error
    Could not compile `exa`.
    
    To learn more, run the command again with --verbose.
    make: *** [target/release/exa] Error 101
    
    $ sudo make install --verbose
    make: unrecognized option '--verbose'
    Usage: make [options] [target] ...
    
    
    os › linux errors › build error 
    opened by jalanb 15
  • Grid view doesn't work

    Grid view doesn't work

    Grid view doesn't seem to work in 0.10.1 - it just displays a downward list. Even if I explicitly tell Exa to use e.g. 8 columns, it keeps displaying a downward list.

    -Exa version: 0.10.1 -OS: Deepin 20.2 (based on Debian 10) -Terminal Emulator: Deepin Terminal

    Could you please look into this? If you need more information, please let me know.

    opened by Vistaus 13
  • Release?

    Release?

    @ogham ogham released this on 15 Jul 2019 · 6 commits to master since this release
    exa release v0.9.0
    
    I will release more than one version of exa this year, mark my words.
    

    Release?

    opened by Narven 13
  • Should respect terminfo.

    Should respect terminfo.

    Currently, for example, set_a_foreground is always an ASCI sequence appropriate for xterm-color, even if my terminfo entry has a different one.

    To verify:

    # Create a terminal info copy. 
    infocmp -L xterm-256color > my-term.ti
    # Change its name and color attribute.
    sed -i.bak 's/xterm-256color|xterm with 256 colors/my-term|My Terminal/' my-term.ti
    sed -i.bak -E 's/([[:space:]]+set_a_foreground=).*/\1smth/' my-term.ti
    # Compile it
    tic my-term.ti
    # Set the current terminal emulator to use the newly compiled terminfo.
    export TERM=my-term
    
    exa
    

    It must print smth instead of colors. If you replace exa in the last command with, say, vim, you'll see the difference. I'd recommend you to take a look at the tput command.

    os › macos os › linux features › ui 
    opened by vlad-shatskyi 13
  • Feature Request: Highlight recent modified files

    Feature Request: Highlight recent modified files

    I'm not sure why this features hasn't been submitted yet in exa, it would be great to highlight files / folders that had been recently modified in the last 24-48hours.

    opened by M1ndo 0
  • Created colors explanation file based on @ogham's text

    Created colors explanation file based on @ogham's text

    As stated in this and this issues, a lot of people don't understand which colors are used for the different file types.

    @ogham has provided an explanation but never merged it back to the main documentation.

    I used his notes and put them into proper markdown and linked all the "manual" files together. I did not include any links on the main readme because I didn't know where to properly put it.


    TLDR: One new readme file to help people understand the colors better.

    opened by vii33 0
  • Natural sort i.e. ls -v

    Natural sort i.e. ls -v

    Hello there,

    Following are outputs from windows command prompt dir, ls and exa. Ideally, I would like to get the order from dir in this scenario. However, the ls -v output is also acceptable.

    Is this possible with exa? If so, how do I do it?

    Thanks.

    Windows command prompt dir output:

    12/14/2022  23:35    <DIR>          .
    12/14/2022  23:30    <DIR>          (12)
    12/14/2022  23:30    <DIR>          aa
    
    

    ls -lFa --group-directories-first -v output:

    drwxr-xr-x 1 user 4096 Dec 14 23:35  ./
    drwxrwxrwx 1 root  4096 Dec 13 21:22  ../
    drwxr-xr-x 1 user 4096 Dec 14 23:30  aa/
    drwxr-xr-x 1 user 4096 Dec 14 23:30 '(12)'/
    

    exa --version output: v0.10.1 [+git]

    exa -lF -a -a --group-directories-first output:

    drwxr-xr-x - user 14 Dec 23:30 (12)/
    drwxr-xr-x - user 14 Dec 23:35 ./
    drwxrwxrwx - root  13 Dec 21:22 ../
    drwxr-xr-x - user 14 Dec 23:30 aa/
    
    opened by lxg208 0
  • Makefiles spelled with a lowercase

    Makefiles spelled with a lowercase "m" do not receive a special color

    Makefile spelled with a lowercase "m" don't get a special highlight and color like makefiles with a capital "M". See screenshots below, with problem encircled. The tarball in the circle is the source code of unrar 6.2.2, found here. I wasn't sure if it was just GNU make that responds to uncapitalized makefiles, however apparently all of GNU make, bmake, and kati work for these. I'm not sure if they're standard.

    Expected behavior (for comparison)

    exa-Makefile

    Problematic behavior

    exa-makefile

    $ exa --version
    exa - list files on the command-line
    v0.10.1 [+git]
    https://the.exa.website/
    

    Operating system: Arch Linux rolling Architecture: x86_64

    good-first-bug 
    opened by saltedcoffii 0
Releases(v0.10.1)
  • v0.10.1(Apr 12, 2021)

    A small patch release (exa's first!) to fix a couple of issues (and to demonstrate a quicker release pace).

    Additions

    (No new features)

    Changes

    • Change the way the "ignored" status is aggregated for directories, so directories containing ignored files no longer look like the directory itself is ignored (bd4f144)
    • Change the icon for TeX files to a "T" (e3e776a)
    • Display the classification character (such as / for directories) at the end of symlink targets (dbd11d3)
    • Display more helpful error messages when a number in a command-line option or environment variable fails to be parsed (550f2d2)

    Fixes

    • Fix thousand separators not being displayed in file sizes (7a4cde7)
    • Fix $EXA_GRID_ROWS displaying the wrong size table in certain situations (c729e22)
    • Fix month name not following locale when a file's date is in the current year (3a8005c)

    Contributors

    Thanks again to ariasuni.

    Source code(tar.gz)
    Source code(zip)
    exa-accoutrements-v0.10.1.zip(9.12 KB)
    exa-linux-armv7-v0.10.1.zip(631.70 KB)
    exa-linux-x86_64-musl-v0.10.1.zip(879.10 KB)
    exa-linux-x86_64-v0.10.1.zip(709.40 KB)
    exa-macos-x86_64-v0.10.1.zip(612.77 KB)
    exa-vendored-source-v0.10.1.zip(20.88 MB)
  • v0.10.0(Apr 4, 2021)

    exa release v0.10.0

    Sorry about the delay, everyone. My aim is still to follow the Rust project itself, and make smaller releases more often. Gonna keep trying until I get there.

    There will be four new types of archive available from now on! An armv7 Linux build, a musl Linux build, an archive containing only the compiled man page and completions, and an archive containing the complete vendored source code.

    This version should be the last version without Windows support.

    Additions

    • The --time flag now defaults to modified without an argument (36cf5df)
    • Add options to hide table columns (925f517)
    • Add customisation settings to change the size colour scale (3ef6195)
    • Add flag for octal permissions (16046d5)
    • Add environment variable for icon spacing (51be9f4)
    • Add --numeric flag to display UIDs and GIDs (4ea79ee)

    Changes

    • Make single-digit hour times zero-padded (1bf9e39)
    • Include symlinks to directories when grouping directories first (69a7e53)
    • Do not sort command-line arguments when --sort=none (bbd6db3)
    • Warn when trying to use the Git feature when it’s disabled (a740512)
    • Sort the command-line arguments (a740512)
    • Allow absolute paths in $TZ environment variable (57cf0f1)
    • Escape the delete character in filenames (b5b7310)
    • Symlinks to directory now use the ‘directory’ icon (0a7ffcd)

    Fixes

    • Fix bug where icons weren’t displayed when file grid wraps (dd9dfff)
    • Fix bug where the wrong file timestamp was being used (215b779)
    • Fix crash on broken symlink in Git repository (a7a8e99)
    • Fix bug where long grid view didn’t turn into long view when piping (6010ed5)
    • Fix handling of potentially-unsupported time metadata. (a636d08)
    • Fix .gitignore parsing by using libgit2 instead of doing it ourselves. (046af5c)
    • Fix crash on encountering a pre-Unix-epoch timestamp. (bc830b9)
    • Fix display of August in timestamps. (3fe35b5)
    • Fix inverted space colour of icons when selecting them. (79bac41)
    • Fix extra column in long grid mode. (0f414cf)
    • Fix rounding of human-readable filesizes. (74ecf6d)

    Contributors

    Thanks to 0rvar, 0x3333, b05902132, BrennanMcDonald, de-vri-es, emgelb, FliegendeWurst, Freaky, imsofi, j-tai, LarsHaalck, mqudsi, msehnout, PatriotRossii, VichoReyes, whonore, and many others for contributing.

    Special thanks to ariasuni.

    Source code(tar.gz)
    Source code(zip)
    exa-accoutrements-v0.10.0.zip(8.91 KB)
    exa-linux-armv7-v0.10.0.zip(622.04 KB)
    exa-linux-x86_64-musl-v0.10.0.zip(873.90 KB)
    exa-linux-x86_64-v0.10.0.zip(701.14 KB)
    exa-macos-x86_64-v0.10.0.zip(605.39 KB)
    exa-vendored-source-v0.10.0.zip(21.32 MB)
  • v0.9.0(Jul 15, 2019)

    exa release v0.9.0

    I will release more than one version of exa this year, mark my words.

    Additions

    • Icon support with --icons (9497b30)
    • New sort options .name and .Name which ignore a leading dot (a156d96)
    • Support TIME_STYLE environment variable (9917810)
    • New option to only display directories, --only-dirs (054cac6)
    • Support 24-bit colours (dc2009a)
    • Display if a file is ignored by Git (80b0d9d)

    Changes

    • Replace the mi colour with bO overlay colour (59d9e90)
    • Pre-release versions have their build number shown (c7497f3)
    • Add --classify to man page (9c77a95)
    • Highlighting for file types .zst (5fae489), Bazel and Ant (c635031), .ts (e711dbc), .m4v (9b446c0), and .jpf (9916742)
    • Create worker threads only once for performance (8cbde76)

    Fixes

    • Allow zero-padded numbers in $LS_COLORS (afc9657, ce3f05c)
    • Make non-uppercase README files immediate (d9c9dbe)
    • Highlight README~ as temporary, not immediate (57e4c08)
    • Use more accurate time to fix inconsistent sorting (649744d)
    • Prevent infinite loop with -aaR (e936d7e)
    • Fix panic in certain timezones (9f76f94 and this fix)
    • Fix sorting by created time (faed8f9)
    • Fix Git status not working for paths containing ../ (f1a5b64)

    Contributors

    Thanks to alexmaco, ariasuni, asoderman, benmezger, BenWhitehead, cecton, chetgurevitch, dguo, Don42, Fierthraix, golem131, ignatenkobrain, jcrd, joshleeb, joshuarli, kornelski, LlinksRechts, lovesegfault, martinlindhe, mfarrugi, mgkurtz, mgttlinger, mopp, nasyxx, ne-sted, Offpics, Paradiesstaub, polyzen, rleungx, semarie, sergeysova, spk, and teresy for contributing!

    Source code(tar.gz)
    Source code(zip)
    exa-linux-x86_64-0.9.0.zip(659.82 KB)
    exa-macos-x86_64-0.9.0.zip(588.39 KB)
    MD5SUMS(102 bytes)
    SHA1SUMS(118 bytes)
  • v0.8.0(Sep 30, 2017)

    This release provides both bug fixes and new features. I've written a post that outlines what's new, as well as some remarks on how I'd like to handle getting me to do releases more often in the future: bsago.me/blog/exa/v0.8.0

    Additions

    • Use completely new, less strict, more friendly options parser (b5bcf22)
    • Add a strict mode, for when you want to check your options (97d1472)
    • Add EXA_GRID_ROWS that makes --long --grid a bit more palatable (e933fa6)
    • Add EXA_DEBUG for logging information (e0727a1)
    • Add LS_COLORS parsing and colouring (adfee28, aa2e3a5)
    • Add EXA_COLORS parsing and colouring, which overrides the above (075fe80, aa2e3a5)
    • Initial support for a --git-ignore flag (827aa8b)

    Changes

    • Default to sorting case-insensitively (57c647f)
    • Hide xattr errors unless xattrs were explicitly asked for (5189d66)
    • Add orf and nef file types (40ce7ba)
    • Add bk file type (eda3e56)
    • Only check the terminal width of stdout, not stdin and stderr (4289f4d)
    • Sorting by date now has new and old convenience aliases (f55bd6d)
    • Use only verified published crates, so exa can be on crates.io (1efb8a5)

    Fixes

    • Use a patched version of libgit2 to prevent that libhttp_parser error (3405db1)
    • Fix bug where --tree --all didn't work (a2cd39e)
    • Fix bug where ISO dates were long when they should be short and vice versa (fca5b6b)
    • Fix bug where month name padding made the whole table look weird (999c9d5)
    Source code(tar.gz)
    Source code(zip)
    exa-linux-x86_64-0.8.0.zip(601.93 KB)
    exa-macos-x86_64-0.8.0.zip(534.58 KB)
    MD5SUMS(102 bytes)
    SHA1SUMS(118 bytes)
  • v0.7.0(Jul 7, 2017)

    Additions

    • Display device IDs when listing block or character devices (ef5fa90660412c1d95a3237be1f4e278a38105e1)
    • Display the sticky/setuid/setgid bits in permissions (110613bf95c25c8258a35bc2217c7a956c94bbec)
    • Allow --all --all to display the . and .. directory entries (5cd7609034da592a7c96c6ef4cdf93fe5a0ebfea)
    • Allow --sort=type to sort by file type: file, directory, link, pipe, device (f750536420b6c7ca8d21f83a10c3a9fdae3cbca1)
    • Add the --time-style option to use the ISO format for timestamps (690aa21ac8bff02ca08323825822c9c663bd4cef)

    Changes

    • Don’t look up things like time zones or locale information when those columns won’t be displayed (97236128ea28093aee95f6536598bbaf48a3263e)
    • Similarly, don’t buffer the entire table before printing it out when not in grid-details view (fc60838ff3021ce913b21516c8db0f8879f8644e)
    • Make the help text like 1% faster to display (763e833b6f3be5a0e4b9cf9f807a4b3874435c7e)

    Fixes

    • Actually display the error when recursing into a directory fails in tree view (f4ddbf384990b3d132833e89662f1aab712da866)
    • Fix crash when given invalid UTF-8 arguments (de60b95850951ec5c71712a82a736e8518cc7bf6)
    • Fix bug where files’ accessed times (atime) were actually modified times (mtime)! (5bdf6304bb9e4bc55e510594f8bbe2c0fe96c9d2)
    • Fix bug where the presence of the COLUMNS environment variable made exa always use colours (84b01f206412d0ee005bb3542b036b0b10091b71)

    Contributors

    Thanks to kballard and gyscos for contributing!

    Source code(tar.gz)
    Source code(zip)
    exa-linux-x86_64-0.7.0.zip(1.11 MB)
    exa-macos-x86_64-0.7.0.zip(527.49 KB)
  • v0.6.0(May 17, 2017)

    Additions

    • Add the --classify option (e81b83b4acf364ecc65206c9be9d7535e1f6c901)
    • Add .cr2 as image type (8ac68f99643bd98ca853d8f90fe454e6c6fbb1f4)
    • Non-printable characters in file names are now escaped (3ebc22580a283b7b79c8808a95caeadc976b49c3, 609bafef49a93d306bf9c210a36fda329387ec00)
    • Add completions for bash, zsh, and fish (897d6ffa563cc15e5628d391e94cafdb282253b1)

    Changes

    • Don’t prepend symlink paths to link targets (f8624ed30896de91820d27091692ce3ecd4b60f3)
    • Turn off the Git networking features, meaning exa does not require OpenSSL, making it smaller and easier to compile (08bc2e3e39025b922d61405c840ae71c97d6b316)
    • Change --help and --version to return exit code 0 (510d2f7a7656aba040816bf379eebbd4e4a6c4ed)
    • Lots and lots of Makefile changes
    • The usual amount of internal restructuring

    Fixes

    • Fix bugs where files with two components, and . and .., were not displayed (a28bd8fa64631bf43bd0fdf2fa0cf56a8a4ad09f, dd63774e37691badb446cb71950ba0d2d18146a3)
    • Handle locales with 4-character-wide short month names (ce8a2e7ce9a447d25f57632e77966248a1130fc4)
    • Fix bug where cell width wasn’t being calculated (08281333002079ee65af35bf3f61abf7f81f7cc2)

    Contributors

    Thanks to maandree, neosilky, MakeNowJust, raphink, kballard many times over, and quininer for contributing!

    Source code(tar.gz)
    Source code(zip)
    exa-linux-x86_64-0.6.0.zip(1.11 MB)
    exa-macos-x86_64-0.6.0.zip(511.93 KB)
  • v0.5.0(Apr 11, 2017)

    Now, where was I?

    Additions

    • Add --colo[u]r option to toggle colours on and off (f92459d95779eef257292234a15e6b4345511830)
    • Add case-insensitive sorting with --Name and --Ext (note the caps) (8805ce9e3bcd4b56f8811a686dd56c47202cdbab, 3e9616cffababc491b1fa587e008a0bdb385901c)
    • Recognise pipes, devices, and sockets on systems where they’re avaliable (a9bb275250e1d2eb3d3e1b2855afee6a0c560903)
    • Add ability to ignore globs (95596297a910455171647dce00781563e4a19d8a)
    • Add option to colour file sizes on a scale (0ffb331976e8563c063d12b476c0b82d76747d1f, 86065f832d5b82320022807bfb02a48f43bc1930)

    Changes

    • Improved help text (edeec0f6f27304dca1fa4e6c3d2b2355a72ffbb6, b35927f24779a4d2ea9212c3c3000daf50027d63, 7e15e0dd491b60fa99f5bd61056e9876eefdaaf6)
    • Use the time zone data present on the system, rather than the perpetually-outdated versions compiled with exa (ee4c09dd30075117473baa4ad2cf108e512fe05c)
    • Print files’ paths if they had paths when passed in as arguments (9b87ef1da2231acef985bb08f7bd4a557167b652)
    • Highlight cryptographic file types (45c93b1b63f2ee17ea15448c048f16dc9a646706)
    • Error messages now go to stderr (8d25719b6bb33ad0e539fb4d7e00e2eb111320ac)
    • Stop printing a header for zero files (a7e3456b0d3b25bb8ed1708935f3ebb571f4fdba)
    • The usual amount of internal restructuring.
    • Lots and lots of upgrades to newer Rust versions.

    Fixes

    • Allow Details view to be used, even if the terminal has no width (1756a0a84157b17676268d730f2faa3151d7cd4a)
    • Compilation fixes for ARM (734c5084ba90c93459eee65fa09da46d583a92b7)
    • Compilation fixes for FreeBSD (b9eb364823d0d4f9085eb220233c704a13d0f611)
    • Fix bug where files were shown to not have extended attributes (4c3266310d04d5a5047a6a740280af62afacbf4f)
    • Fix bug where files weren’t being sorted correctly in Details view (f6c5c89f55c694f04f9f0a1269f5c4945450d78b)
    • Fix bug where the directory name above a list of files was not printed (f35d28d1b8e85b37f5dbca17014f4c0f62fa5c30)

    Contributors

    Thanks to skade, petevine, jbeich, tomassedovic, hoodie, lindenk, gemmarx, spk, Stebalien, and neosilky for contributing!

    Source code(tar.gz)
    Source code(zip)
    exa-linux-x86_64.zip(1.16 MB)
    exa-macos-x86_64.zip(1.13 MB)
  • v0.4.1(Mar 29, 2017)

    This is a snapshot of exa’s current code, which has been cleaned up a bit and at the very least been run through untry (which managed to pick apart all try!s but one). It’s being released to work around a bug in macOS Sierra.

    Usually when I do a release I go through the commit history, pick out anything that looks like it could be a bullet point in the release notes, look at the contributors and see who’s there, then edit the website and upload — there are more features in here than just the openssl upgrade, and the work done so far is really deserving of a “proper” release, rather than just a beta.

    But I don’t even want to learn how little work I’ve done on it in the past twelve months.

    I think I need to be honest with everyone here. My interest in exa is still there, and the list of features I’d still like to add is as long as it’s ever been, but my motivation is completely shot. Compared to even a year ago it’s plummeted. Every day I go to work, bang out code on whatever it is I’m doing, leave, arrive home, then do my best to not do anything, on the computer or off it. My life’s going alright, I can still do things, I’m able to do things, but I just... don’t, and I wish I could give you a better reason than that. GitHub notifications were something I’d deal with later that day, then next week, then whenever I’d get around to it, and then routed into a folder in my inbox that I never actually checked, and then every day I’d see that number and hope it didn’t increase, and then I noticed that whenever it did increase I wouldn’t be able to concentrate on anything for another hour, so I just hid it, which hurt at first but at least gave me some time back. I’d still commit from time to time, but not mention any of this because I didn’t want to call attention to it, as though in time everyone would just forget. Whenever I saw a reply to the Sierra bug thread, I’d log in, read it, start to worry that if I replied now then I’d be admitting to everyone that I was still around and hadn’t died or something and was instead just ignoring their comments, and then what would people think of me? I even got as far as navigating to “Delete this repository” before I had to push the computer away.

    That’s one push that went correctly. It’s obvious to say, but it’s stupid to delete code that people are using, just because you didn’t want to deal with the fact that you made a mistake.

    I’m going to try something new: switching exa to a routine 6-week release schedule. The Rust has a release train that works over the same duration using multiple versions. I think exa (a hundredth its size) can do without that part, but the rest of it is good advice. Having an actual date for each one means I don’t get a choice in releasing anything or not, which is an incredible motivator for actually doing it! I still have to put 0.5.0 out properly, but with luck, the second release (0.6.0, which would come out halfway through May) would be a lot less daunting than the first, the third less than the second, and it would plateau from there.

    The root advice here is “if you’re having difficulty doing something, then do it more often, because it gets easier”. I found actually releasing my software hard. I want it to be easier.

    I hope you all find this acceptable, and I apologise again for the massive commit lacuna.

    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Oct 18, 2015)

    So a while back I decided to add lots more info to exa's site, and unknowingly described a bunch of features that were in the development version but not the release version! So this is a kind-of emergency release to allow everybody to use those features, even those using the released versions.

    The downside of this is that I did mark some features as ones I wanted to complete before the v0.4.0 milestone. All that's happened is the version that they'll show up in has been renamed, but they're all still on my radar.

    Additions

    • Add --grid --long view, which splits the details into multiple columns (090cebe)
    • Allow --tree without --long, which displays a tree view without any details (e1f4ea9)

    Changes

    • DragonFlyBSD support (9601884, 6317417)
    • Change symlink arrow to -> from => (ebbac61)
    • Extended attributes are now displayed as child nodes (eee49ec)
    • Individual files are now queried in parallel (fa51a87)

    Fixes

    • Fix bug where Git repos were always queried, making exa very slow (d547c3f)
    • Fix bug where an extra newline was printed (6cf9274)

    Contributors

    Thanks to mgee, mneumann, kbknapp, lilydjwg, petevine, rhysd, hoodie, and DavidJFelix for contributing!

    Source code(tar.gz)
    Source code(zip)
    exa-linux-x86_64.zip(601.79 KB)
    exa-osx-x86_64.zip(489.33 KB)
  • v0.3.0(Jun 5, 2015)

    It's been exactly 100 commits and just over three months since version 0.2, so it's about time I did another binary release. This one fixes a few bugs, but most of the code changes have been maintenance: upgrading to the new standard filesystem library was a big step, and having dates in the right time zone is something I'm glad to have finally landed.

    By the way, I've decided to hold off on version 1.0 until exa can compile with Rust Stable. There aren't many feature flags left, and most of the ones that are pertain to the new std::fs library that we need to use. So exa will continue to require the nightly version for the foreseeable future.

    Additions

    None in this build.

    Changes

    • Make the Git column optional, to improve performance on large repositories (7dc3a02)
    • Stat files in parallel, for a nice speed boost! (d2df70e)
    • Use the new Rust fs and io libraries (ffcc6fa)
    • ANSI codes are now not displayed when output is not to a terminal (36116a1)

    Fixes

    • More options now require --long (5d152db and a4459da)
    • Timestamps are now in the user's correct time zone, rather than UTC (cc1d6aa)
    • Executable files are now highlighted in green (b452967)
    • Allow compilation without Git support (5caa6dd)

    Contributors

    Thanks to byteprelude, killercup, e12e, tsurai, and mgee for contributing! And thanks to everyone who's given feedback, reported bugs, and just plain used the thing.

    (Please let me know if I've missed you out.)

    Source code(tar.gz)
    Source code(zip)
    exa-linux-x86_64.zip(615.96 KB)
    exa-osx-x86-64.zip(488.82 KB)
  • v0.2.0(Mar 2, 2015)

    This is the first proper 'release' of exa. A number of people have been clamouring for these because Rust isn't fully stable yet, and there have been days when it's failed to build because of upstream failures. And if you're the sort of person (like me) who just aliases ls to the in-development version of exa, your ls will fail half the time.

    Unfortunately, I have no idea whether these releases will work or not. I just built them with Cargo. If they don't work, please tell me!

    Additions

    • Add missing sort-by-date options. You can now also sort by 'modified', 'created', and 'accessed'. (a4e1719)
    • Add extended attribute support. (ce23c63)
    • Add --level option to limit depth of recursion and tree view. (f505bdc)
    • Add --group-directories-first option. (ff1f6d0)
    • Add --version command. (67f60e6)

    Changes

    • Change date format to mimic ls. (0082563)
    • Numerous small optimisations and fixes.

    Fixes

    • Use the width of the file name in the grid view, instead of its length. The width handles multibyte UTF-8 characters and filenames with combining diacritics correctly. (43e8061)
    • Fix getting Git status while in a subdirectory. (6e19563)
    • Fix displaying UIDs and GIDs that are over 231. (38a7854)
    • Fix panic when previewing symlink to . or .. or /. (1da1142)
    • Fix missing /s in symlink targets. (ef58c30)

    Major stuff not done yet

    • Git is still slow when working with large repositories (#28)
    • No Windows support! (#32)

    Contributors

    Thanks to nwin, Stebalien, tuftedocelot, coyotebush, davidcelis, ebfe, mikefaille, and jgilchrist for contributing!

    Source code(tar.gz)
    Source code(zip)
    exa-linux-x86_64.zip(535.40 KB)
    exa-osx-x86_64.zip(406.49 KB)
  • v0.1.0(Feb 21, 2015)

🍂 A Rust-based simulated DOM (browser-independent replacement for web_sys)

DOM in Rust without a browser Hello and welcome. This library provides server-side or browserless simulation of a DOM. Example Usage use std::sync::Ar

Philip Peterson 45 Dec 13, 2022
A modern alternative to watch command

A modern alternative to watch command

Tavo Annus 7 Oct 7, 2022
A modern replacement for ps written in Rust

procs procs is a replacement for ps written in Rust. Documentation quick links Features Platform Installation Usage Configuration Features Output by t

null 3.6k Jan 5, 2023
A modern replacement for ‘ls’.

exa exa is a modern replacement for ls. README Sections: Options — Installation — Development exa is a modern replacement for the venerable file-listi

Benjamin Sago 20.3k Jan 6, 2023
exa is a modern replacement for ls.

exa exa is a modern replacement for ls. README Sections: Options — Installation — Development exa is a modern replacement for the venerable file-listi

Benjamin Sago 20.3k Jan 8, 2023
Modern Drop-in Replacement for Nginx AutoIndex / FancyIndex!

MeowIndex A cute, feature-rich file listing module to replace nginx's autoindex / fancyindex. Features List files Show file icons Clickable, length-sa

Hykilpikonna 4 Feb 25, 2023
A modern, maintained replacement for ls

eza eza is a modern, maintained replacement for ls, built on exa. README Sections: Options — Installation — Development eza is a modern, maintained re

eza 13 Aug 7, 2023
Rust-based replacement for the default Minecraft renderer

wgpu-mc ?? A blazing fast alternative renderer for Minecraft Intro WebGPU is a new web specification designed to provide modern graphics and compute c

Birb 1 Jun 28, 2022
🍂 A Rust-based simulated DOM (browser-independent replacement for web_sys)

DOM in Rust without a browser Hello and welcome. This library provides server-side or browserless simulation of a DOM. Example Usage use std::sync::Ar

Philip Peterson 45 Dec 13, 2022
Rustyread is a drop in replacement of badread simulate.

Rustyread is a drop in replacement of badread simulate. Rustyread is very heavily inspired by badread, it reuses the same error and quality model file. But Rustyreads is multi-threaded and benefits from other optimizations.

Pierre Marijon 20 Oct 1, 2022
zoxide is a blazing fast replacement for your cd command

zoxide A smarter cd command for your terminal zoxide is a blazing fast replacement for your cd command, inspired by z and z.lua. It keeps track of the

Ajeet D'Souza 8.7k Dec 31, 2022
procs is a replacement for ps written in Rust.

procs is a replacement for ps written in Rust. Documentation quick links Features Platform Installation Usage Configuration Features Output by t

null 3.6k Dec 30, 2022
fastmod is a fast partial replacement for the codemod tool

fastmod is a fast partial replacement for codemod. Like codemod, it is a tool to assist you with large-scale codebase refactors, and it supports most of codemod's options.

Facebook Incubator 1.4k Dec 29, 2022
age-encrypted secrets for NixOS; drop-in replacement for agenix

ragenix ragenix provides age-encrypted secrets for NixOS systems which live in the Nix store and are decrypted on system activation. Using ragenix to

YAXI 91 Jan 8, 2023
🐱‍👤 Drop-in HTTP replacement module for Garry's Mod

??‍?? gmsv_reqwest This module is a drop-in replacement for Garry's Mod's HTTP function, inspired by gmsv_chttp created by timschumi. The module uses

William 38 Dec 12, 2022
A drop-in replacement for `dapp` and `seth` in Rust

dapptools.rs Rust port of DappTools dapp example Usage Run Solidity tests Any contract that contains a function starting with test is being tested. Th

Georgios Konstantopoulos 5k Jan 1, 2023
🍂 A Rust-based simulated DOM (browser-independent replacement for web_sys)

DOM in Rust without a browser Hello and welcome. This library provides server-side or browserless simulation of a DOM. Example Usage use std::sync::Ar

null 45 Dec 13, 2022
A readline replacement written in Rust

A readline replacement written in Rust Basic example // Create a default reedline object to handle user input use reedline::{DefaultPrompt, Reedline,

JT 292 Jan 9, 2023
Fls - Ferris-LS, a very bad LS replacement. Besides that, proves that I suck at clean & good code.

FLS A handy ls remake, purely for learning. Why FLS? There's no reason, at all, don't use it. I just want to learn Rust :D Usage Flags: -i = Use icons

florida 6 Jan 24, 2022
Extent - replacement for std::ops::{Range,RangeInclusive}

extent This is an alternative to std::ops::{Range,RangeInclusive}, avoiding the quirks of those types (non-Copy, inability to produce empty inclusive

Graydon Hoare 33 Sep 27, 2022