mirror of
https://github.com/Llewellynvdm/exa.git
synced 2024-12-27 10:22:40 +00:00
A modern replacement for ‘ls’.
adbaa51cb9
Exa now uses the new IO, Path, and Filesystem libraries that have been out for a while now. Unfortunately, the new libraries don't *entirely* cover the range of the old libraries just yet: in particular, to become more cross-platform, the data in `UnstableFileStat` isn't available in the Unix `MetadataExt` yet. Much of this is contained in rust-lang/rfcs#1044 (which is due to be implemented in rust-lang/rust#14711), but it's not *entirely* there yet. As such, this commits a serious loss of functionality: no symlink viewing, no hard links or blocks, or users or groups. Also, some of the code could now be optimised. I just wanted to commit this to sort out most of the 'teething problems' of having a different path system in advance. Here's an example problem that took ages to fix for you, just because you read this far: when I first got exa to compile, it worked mostly fine, except calling `exa` by itself didn't list the current directory. I traced where the command-line options were being generated, to where files and directories were sorted, to where the threads were spawned... and the problem turned out to be that it was using the full path as the file name, rather than just the last component, and these paths happened to begin with `.`, so it thought they were dotfiles. |
||
---|---|---|
contrib | ||
man | ||
src | ||
.gitignore | ||
.travis.yml | ||
Cargo.lock | ||
Cargo.toml | ||
LICENCE | ||
Makefile | ||
README.md | ||
screenshot.png |
exa
exa is a replacement for ls
written in Rust.
You'll have to use the nightly, rather than Rust beta. Sorry about that.
Screenshot
Options
- -1, --oneline: display one entry per line
- -a, --all: show dot files
- -b, --binary: use binary (power of two) file sizes
- -B, --bytes: list file sizes in bytes, without prefixes
- -d, --list-dirs: list directories as regular files
- -g, --group: show group as well as user
- --group-directories-first: list directories before other files
- --git: show git status (depends on libgit2, see below)
- -h, --header: show a header row
- -H, --links: show number of hard links column
- -i, --inode: show inode number column
- -l, --long: display extended details and attributes
- -L, --level=(depth): maximum depth of recursion
- -m, --modified: display timestamp of most recent modification
- -r, --reverse: reverse sort order
- -R, --recurse: recurse into subdirectories
- -s, --sort=(field): field to sort by
- -S, --blocks: show number of file system blocks
- -t, --time=(field): which timestamp to show for a file
- -T, --tree: recurse into subdirectories in a tree view
- -u, --accessed: display timestamp of last access for a file
- -U, --created: display timestamp of creation of a file
- -x, --across: sort multi-column view entries across
- -@, --extended: display extended attribute keys and sizes
You can sort by name, size, ext, inode, modified, created, accessed, or none.
Installation
exa is written in Rust. You'll have to use the nightly -- I try to keep it up to date with the latest version when possible. Once you have it set up, a simple make install
will compile exa and install it into /usr/local/bin
.
exa depends on libgit2 for certain features. If you're unable to compile libgit2, you can opt out of Git support by passing --no-default-features
to Cargo.