mirror of
https://github.com/Llewellynvdm/exa.git
synced 2024-11-26 13:56:27 +00:00
A modern replacement for ‘ls’.
4e49b91d23
This commit removes the threadpool in `main.rs` that stats each command-line argument separately, and replaces it with a *scoped* threadpool in `options/details.rs` that builds the table in parallel! Running this on my machine halves the execution time when tree-ing my entire home directory (which isn't exactly a common occurrence, but it's the only way to give exa a large running time) The statting will be added back in parallel at a later stage. This was facilitated by the previous changes to recursion that made it easier to deal with. There's a lot of large sweeping architectural changes. Here's a smattering of them: - In `main.rs`, the files are now passed around as vectors of files rather than array slices of files. This is because `File`s aren't `Clone`, and the `Vec` is necessary to give away ownership of the files at the appropriate point. - In the details view, files are now sorted *all* the time, rather than obeying the command-line order. As they're run in parallel, they have no guaranteed order anyway, so we *have* to sort them again. (I'm not sure if this should be the intended behaviour or not!) This means that the `Details` struct has to have the filter *all* the time, not only while recursing, so it's been moved out of the `recurse` field. - We use `scoped_threadpool` over `threadpool`, a recent addition. It's only safely used on Nightly, which we're using anyway, so that's OK! - Removed a bunch of out-of-date comments. This also fixes #77, mainly by accident :) |
||
---|---|---|
contrib | ||
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 1.0 stable or 1.1 beta. Sorry about that.
Screenshot
Options
exa's options are similar, but not exactly the same, as ls
.
Filtering Options
- -a, --all: show dot files
- -d, --list-dirs: list directories as regular files
- --group-directories-first: list directories before other files
- -L, --level=(depth): maximum depth of recursion
- -R, --recurse: recurse into subdirectories
View Options
- -1, --oneline: display one entry per line
- -r, --reverse: reverse sort order
- -s, --sort=(field): field to sort by
- -x, --across: sort multi-column view entries across
- -T, --tree: recurse into subdirectories in a tree view
You can sort by name, size, ext, inode, modified, created, accessed, or none.
Long Format
- -b, --binary: use binary (power of two) file sizes
- -B, --bytes: list file sizes in bytes, without prefixes
- -g, --group: show group as well as user
- --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
- -m, --modified: display timestamp of most recent modification
- -S, --blocks: show number of file system blocks
- -t, --time=(field): which timestamp to show for a file
- -u, --accessed: display timestamp of last access for a file
- -U, --created: display timestamp of creation of a file
- -@, --extended: display extended attribute keys and sizes
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.