14 ms·
Eza: A modern, maintained replacement for ls
- INTPenis 2y agoI use lsd, because I like the name and it does what I want so far.
- barkingcat 2y agoHow are people paging with these ls replacements? I wish with all the features it includes some guidance about which pager is suitable. more? less? something else? how does the pretty colors work with paging?
- timmytokyo 2y agoI use the --color=always option with eza. This allows it to be piped through less and still maintain the color. To avoid having to type that option every time, I have a bash alias for ls: alias ls='eza -F --color=always'
- codr7 2y agoI actually installed it a few days ago, which is rare for me, I tend to be restrictive to a fault with configuring my environment these days. Happy so far. Difftastic was another gem for me.
- bsimpson 2y ago[flagged]
- greazy 2y agoI would agree with you but in this case the author is catering to both types of users. Which is perfectly acceptable in my opinion. If they wrote eza to only accept UK spelling, then you'd have a stronger argument. Personally while I use UK spelling all my tools will use color as an option flag.
- bsimpson 2y agoI only looked at the repo home page. The license file was named LICENCE and the README used "colour." Looks like the author is Danish.
- erik_seaberg 2y agoIt looks like the nu-ansi-term crate hardcodes escape sequences. It would be more reliable to use terminfo or termcap as the sources of truth for which ones the tty supports.
- AlchemistCamp 2y agoNot at three key strokes, it isn't!
- gaws 2y ago`alias ls = "exa"` Problem solved.
- betaby 2y agoWhy `ls` replacement needs kerberos and ssh? ldd /usr/bin/eza linux-vdso.so.1 (0x00007f5238f5e000) libgit2.so.1.7 => /lib/x86_64-linux-gnu/libgit2.so.1.7 (0x00007f5238cfd000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5238cd0000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5238bee000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5238a09000) libgssapi_krb5.so.2 => /lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007f52389b5000) libmbedtls.so.14 => /lib/x86_64-linux-gnu/libmbedtls.so.14 (0x00007f523897f000) libmbedx509.so.1 => /lib/x86_64-linux-gnu/libmbedx509.so.1 (0x00007f523895e000) libmbedcrypto.so.7 => /lib/x86_64-linux-gnu/libmbedcrypto.so.7 (0x00007f52388d3000) libhttp_parser.so.2.9 => /lib/x86_64-linux-gnu/libhttp_parser.so.2.9 (0x00007f52388c8000) libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f523882d000) libssh2.so.1 => /lib/x86_64-linux-gnu/libssh2.so.1 (0x00007f52387e6000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f52387c5000) /lib64/ld-linux-x86-64.so.2 (0x00007f5238f60000) libkrb5.so.3 => /lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007f52386ef000) libk5crypto.so.3 => /lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007f52386c2000) libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007f52386bc000) libkrb5support.so.0 => /lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007f52386af000) libcrypto.so.3 => /lib/x86_64-linux-gnu/libcrypto.so.3 (0x00007f5238000000) libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007f52386a6000) libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f5238695000) libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007f52385cd000)
- atiedebee 2y agoThat's a lot of dependencies for ls of all things
- ptdorf 2y agoEza: A modern, maintained replacement for Exa ;-)
- mnjksd 2y ago[dead]
- zeristor 2y agoI just found this after I noticed support had stopped for exa.
- isatty 2y agoWhy is why I’ll never be using any of these as the default. ls works, is not mission critical (you know what I mean), and will always be around.
- alabhyajindal 2y agoMy ls usage went down 100% after I switched to fish shell. The built in Alt + l command lists the directory contents. Very helpful! And also results in a cleaner shell history.
- mixmastamyk 2y agoI realized most of my ls runs come right after `cd`, so I added these to my startup files. Now almost every `cd` does `ls` automatically: # bash, simple function cd() { builtin cd "$@" && ls -l } # fish, a bit more sophisticated function cd builtin cd $argv; if test $status -gt 0 # there was an error, stop return end # auto print dir info if test "$argv" != "" # not home though dir # aka ls -l ... end end
- Osiris 2y agoI have been using fish for a long time and I didn't know about this. Thanks.
- tormeh 2y agoAlso many shells come with greatly improved ls implementations built in, like that of nushell.
- fsiefken 2y agoyes, but the good thing is that you don't have switch shells with this. I'm running nushell on windows, which is nice, but I haven't got it as concise with $env.config.table.mode = "none", it also doesn't feature the tree display
- jiehong 2y agoI cannot find this shortcut in https://fishshell.com/docs/current/interactive.html https://fishshell.com/docs/current/interactive.html. Do you know where it's documented by any chance?
- 2y ago
- _flux 2y agoSeems quite similar to https://github.com/lsd-rs/lsd https://github.com/lsd-rs/lsd . How do they compare? I know though lsd has one annoying bug when using it for grepping: https://github.com/lsd-rs/lsd/issues/1052 https://github.com/lsd-rs/lsd/issues/1052
- cafkafk 2y agohttps://github.com/orgs/eza-community/discussions/679#discussioncomment-7631970 https://github.com/orgs/eza-community/discussions/679#discus...
- _flux 2y agoWell, eza certainly seems faster on my micro-benchmark as well, though in general I never have any performance issues with these tools. Btw, ls beats them both easily (in my single-directory test). So features would be my main criteria, I guess. At least eza doesn't have that annoying bug I linked :). Short comparison: - Eza doesn't have the lsd's piping bug - Eza has more different output from ls than I would like (by default) - Both have git support - Eza --hyperlink doesn't have "auto" mode so if I alias ls to it, ls | sed hacks will likely behave unexpectedly if I enable it: https://github.com/eza-community/eza/issues/703 https://github.com/eza-community/eza/issues/703 and this also seems like an instance of it: https://github.com/eza-community/eza/issues/693 https://github.com/eza-community/eza/issues/693 - Eza is slower to write than lsd :) - Eza has more options to change its behaviour than lsd Overall I think the hyperlink issue is more severe than lsd's piping one, so I think I'll just keep using lsd for the time being.
- srid 2y agoI've used both, but settled on using `lsd`. While eza has slightly better performance, that difference doesn't usually matter for a `ls` alternative (unless you operate on very large directories) and `lsd` is nicer and feature rich.
- felixr 2y agoI find it strange that the README does not mention at that `eza` is a fork of `exa`.
- n8henrie 2y ago> eza features not in exa (non-exhaustive): It at least mentions it's existence (though no link or context)
- cafkafk 2y agocontributions welcome
- soraminazuki 2y agoCrediting people becomes awkward when it's done by outsiders though.
- sriram_malhar 2y agoFor a long time now, I have wanted all command line utilities to consider options --exclude <regex> and --include <regex> options, where the regex refers to paths. This is applied before they do any displaying or evaluation. So much more convenient than xargs.
- arp242 2y agoYou can get something similar with shell globs, and ~not in zsh. e.g. *~*.c(.) to exclude all .c files (and only list files, not directories or anything else). Looks a bit obscure at a glance due to lack of spaces, but it's not that different from -exclude or "| grep -v".
- jiehong 2y agoÀ la powershell’s Get-ChildItems! It’s a good point, as the shell glob syntax is too limited.
- Tor3 2y agoI have a problem with all terminal tools that insist on using colors to distinguish between various file types or attributes etc ('ls' is often set up like that too for distros, but I simply delete the config which sets that, the default doesn't). I use a terminal background which is easy on my eyes, and those color schemes always include colors which clash with the background or makes them hard to see in other ways. In short - I don't want colors in my 'ls' or 'ls' equivalent output. I'm fine with what ls with '-AFC' gives me.
- Tyriar 2y agoI work on VS Code. We have a feature for this exact problem that enforces a minimum contrast ratio of 4.5:1 via shifting the luminance of the foreground text by default https://code.visualstudio.com/docs/terminal/appearance#_minimum-contrast-ratio https://code.visualstudio.com/docs/terminal/appearance#_mini... . This feature's in xterm.js so any terminal based on xterm.js can leverage this. We actually got a bit of push back when this was released but I haven't heard anything for quite a while now that some time has passed and we have a FAQ for colors not being "correct".
- jiehong 2y ago--color=never
- scns 2y agoSolarized is easy on the eyes and the colours are chosen for readability. https://ethanschoonover.com/solarized/ https://ethanschoonover.com/solarized/ The list on the site lacks some entries. Konsole has it built in and i bet Gnome Terminal too.
- kibwen 2y agoPet peeve, Solarized makes no sense as a terminal color scheme, because it maps brgreen, brblue, bryellow, and brcyan to barely-distinguishable shades of gray. It just doesn't have enough colors in its palette to cover the range of colors that the authors of CLI tools expect your terminal to be able to display. Also, Solarized's whole trick is that its colors are perceptually uniform in terms of lightness, and I think the results speak for themselves why we don't do this in practice. If you want a yellow that actually looks yellow and not a shade of puke brown, it needs to be brighter than the other colors (especially red, which needs to be darker than the other colors if you don't want it to look pink).
- deskr 2y agoVisually fancy, but personally it's way too "busy" for my brain.
- dsjkvf 2y agoWhat's the point, though? You still have to rely on POSIX and / or GNU tools in most scenarios, and if already knowing / using those, then why bother to switch to anything else?
- jryb 2y agoI don't know how common my situation is, but I don't have any of those constraints. I have eza aliased to ls both on my daily driver and all of my work servers and it hasn't caused me a single problem.
- oneeyedpigeon 2y agoUse cases are different. I bet I'm not the only one who runs ls manually on my command line a LOT more than I ever use it in scripts.
- jen20 2y agoThe only time you have to care about GNU tools vs your own preference of tool is when writing scripts to run on computers running some Linux distributions, and per [1] you shouldn’t be using ls for that. [1]: https://www.shellcheck.net/wiki/SC2045 https://www.shellcheck.net/wiki/SC2045
- alerighi 2y agoYes but if you work professionally as a software engineer, chances are that you don't only use your PC. Being that a server that you connect remotely to develop on, or a production system where you connect to investigate a bug, or the PC of a coworker you are helping, or getting inside a container, etc. Getting to know and use a standard setup makes you efficient in that situations, that is also the reason why I learned to use vim (since vim or at least vi you can take for granted there is on every system). The only concession that I make is the shell, since zsh is much more convenient to use than bash, even if every time I use a system with bash I of course write some code that works in zsh and have to remember that in bash you can't do it. That is annoying, but to me it's worth it to use a better shell, not worth probably for an `ls` clone.
- fsiefken 2y agoNeat, it also works on termux, I like the tree output. Is there a parameter to just display the size, name and date format YYMMDD or rickdate for even shorter display, or can I hack it in the rust code? The permission and user column output distract me and take up space. With rust it can also be compiled to wasm and run on ios a-shell (which runs vim and python wasm and other smallish wasm's).
- e38383 2y agoeza -l --time-style=+%Y%m%d --no-user --no-permissions
- nottorp 2y ago[flagged]
- lynndotpy 2y agoThis is unnecessary, it's not advertising on Rust. The README directly explains why they describe `eza` as modern. It makes no mention of Rust or memory safety. Personally, I use eza because of `--tree` and `--git`.
- nottorp 2y ago[flagged]
- deciduously 2y agoThat reaction was your choice, not the project's.
- cafkafk 2y agofwiw we're glad we're scaring people like that away :p
- nottorp 2y agoYeah, you only need the true believers :p Everyone else will be condemned to read and reread the latest C++ standard for all eternity!
- djchateau 2y agoYou really shouldn't. You're adding to the stereotype that Rust developers are insufferable and not to be collaborated with. Scaring away good developers from your projects is a bad thing, not a good thing.
- sdkdfjdlkdsj 2y ago
- kseistrup 2y agoTangentially, does anyone know what happened to Ben Sago, the author of exa?
- daghamm 2y agoWho uses ls anyway? I tab-complete until it lists the files I need. Just kidding. But on a more serious note, why does he claim ls is not maintained anymore?
- hparadiz 2y agoFor some reason it became the norm to think that if some piece of software isn't updated regularly that it's inherently out of date.
- coffeeri 2y agoI think they are not referring to ls, but to exa [0], which is not maintained anymore. [0]https://github.com/ogham/exa https://github.com/ogham/exa
- Izkata 2y agoNo, they definitely mean "ls": > By deliberately making some decisions differently, eza attempts to be a more featureful, more user-friendly version of ls.
- coffeeri 2y agoYes, it is marketed as a better “ls”. I was commenting regarding “maintained” in: > A modern, maintained replacement for ls. “Maintained” is referring to exa I think.
- kristopolous 2y agoFor people reading this and trying it for the first time and going through nix problems (well I did at least), check your distro package repo instead for eza. You probably already have it.
- tcsenpai 2y agoI am gonna pioneering using this as a drop in replacement for "ls". If i am not back in some days, remember me as a pioneer. Btw good work, i always like modern gnu compatible tools
- JonChesterfield 2y agoI'm under the impression that ls doesn't do very much. I'd expect it to be a small wrapper around libc. This is thousands of lines of rust with emphasis on community building and ongoing development. There seems to be a disconnect between engineering effort and product here which doesn't totally make sense to me. I think I'll stay with ls.
- hibbelig 2y agoChallenge: which of the letters a to z and A to Z are NOT switches that modify the behavior of ls? I would guess that ls has at least 50 different behaviors based on the switches.
- st_goliath 2y ago> which of the letters a to z and A to Z are NOT switches that modify the behavior of ls? For GNU ls: e/E, j/J, V, K, M, O, P, W, y/Y and z are not used It uses all the other upper and lower case letters, along with digit 1 and has a hand full of long options without a corresponding short one. Edit: I double-checked the man page, I'm surprised how many are unused, I would have guessed that it uses all of them by now.
- gumby 2y ago> For GNU ls: e/E, j/J, V, K, M, O, P, W, y/Y and z are not used Challenge accepted!
- creshal 2y agoeza's scope is much larger than ls's, and has tons of additional features. And IMO, that's sensible: ls is primarily an interactive tool (basically all uses of it in shell scripts are wrong), so adding more features that help users to better/more easily make sense of their directory listings is a net benefit, even if it makes the tool somewhat slower. Folder icons in the terminal may sound silly, but eza uses them to indicate empty folders, among others. Colour-coded file age/size columns make parsing a directory list faster. Git columns saved my many trips through gitignore / git status. And so on. And even through not particularly fast fuse-over-network connections it's still faster than I can type, which is more than good enough for an interactive CLI tool.
- tmountain 2y agoTyping eza is a pretty horrible three character combination on a qwerty keyboard. One advantage of ls is it’s a lightning fast set of key strokes. I guess you can alias, but that’s kind of weird (compatibility, etc).
- glandium 2y agoThis is where an azerty keyboard shines.
- elendee 2y agothis was my first reaction too
- redxtech 2y ago`command -v eza >/dev/null && alias ls="eza"`
- acupofnope 2y agoCan you elaborate on why aliasing is kind of weird?
- jen20 2y agoI’ve had eza (and formally exa) aliased as ls, ll and lll since around 2015 and never hit a compatibility issue. I also have sl installed to encourage accuracy when running it…
- cafkafk 2y agoI was a former exa user, and the z is next to x on my keyboard, wasn't a huge hassle for me
- synergy20 2y agols -lrt eza -lrt (broken) I wish it's 100% compatible to ls
- WhyNotHugo 2y agoI keep `ls` un-aliased precisely because of this. I do keep these two aliases around: alias l="eza --all" alias ll="eza --long --all --time-style=long-iso --group"
- AndyKluger 2y agoYeah that one's annoying. I got used to a "recent" alias (Zsh): if (( $+commands[eza] )) { alias recent="eza --binary --octal-permissions --no-permissions --git -snew --icons=always" } else { alias recent="ls -rt" }
- dflock 2y agoThis also works on Windows, fwiw.
- deleted 2y ago[deleted]
- kazinator 2y agoGNU ls is maintained. I see commits affecting the ls.c file from 2024-06-24 and 2024-06-27; less than a month ago. The GNU Coreutils mailing list is fairly busy also. This project seems to be using the word maintained for the meaning of actively developed.
- elashri 2y agoNo the maintained here means it is a maintained (replacment) with reference that it is a fork of exa which was a ls replacment that is not maintained anymore. It does not say that ls is not maintained.
- ehutch79 2y agoLook at the title above. It only says Eza and ls. It says eza is maintained, which tells me the other,ls, is not maintained. Doesn’t mention exa. Yes it’s missing nuance if you don’t click through, but that’s a complete statement, and I wouldn’t expect people to click through to get more context
- timeon 2y agoYes title is not clear so parent was just clarifying.
- wffurr 2y agoDon’t comment based on just the title, please.
- kazinator 2y agoI clicked through the title, but mostly looked at code and example invocations and output.
- ehutch79 2y agoSide note: the English language is a dumpster fire, and it’s easy for these issues to happen.
- godshatter 2y agoOne pet peeve of mine is "human readable dates", especially for a directory listing. If I'm scanning for something I copied into a folder yesterday amongst other things, I don't want everything to show "1 day ago" if I'm looking for something I did around 11am. I want the dates and times. That goes for forums like HN. Show me the date/time and also "7 hours ago" or whatever if you have to. I've never understood taking that information away. I wonder if it's a consequence of infinite scroll or something.
- keybored 2y agoOne thing I really like about all of the ago formats: - What it says: 1 year ago - What it is: 1 year and 10 months ago
- fuzztester 2y agoYes, I hate that approach too. I think it started with either Web 2.0 startups (I was working with one at the time, that implemented that in their product), or with Google and suchlike companies around that time, in their general web apps or social media web apps. I agree, they should provide the detailed time, then provide the days ago thing too, if they want to.
- crabsand 2y agoThe same I feel, so I didn't bother to print human readable dates in my open source mlops project. xvc file list[0] prints times in the same format even if it changed a minute or a year ago. [0]: https://docs.xvc.dev/ref/xvc-file-list https://docs.xvc.dev/ref/xvc-file-list
- hhh 2y agoYou can hover over the time on HN and get a timestamp.
- tirpen 2y agoNot if you are on a phone or similar device, which lots of people are. Important info like that should never be only accessible by hovering a mouse pointer that may or may not exist.
- desireco42 2y agoI will join others here to point out that information in readme is not presented the best way. I am developer so I understand this, if you just take feedback from this post here and apply it, it will be much better. - It is not fair to say ls is not maintained - Clarify this is for of exa, I am familiar with exa, I wasn't sure what eza was. - Give example how it can be used, alias ls="exa " for example, give few example of usage, not everyone is following your repo every day. Thank you for work you've put into this.
- xigoi 2y agoIt’s not saying that ls is not maintained.
- arminiusreturns 2y agoMIT - immediate nope from me for my gnu/linux stacks, but it seems well made and I wish you well!
- jm4 2y agoWhat’s with all these new versions of GNU utilities being built with the MIT license? Seems like there are a lot of them.
- mprovost 2y agoThe GNU project didn't invent ls. The GNU coreutils (including ls) were originally new versions of either proprietary (AT&T) or BSD licensed utilities.
- Arnavion 2y agoRust users tend to permissively-license their code in general. I don't know if there are easily available statistics but almost everything on the Rust package repository (crates.io) is MIT or Apache-2.0; certainly the most popular libraries are.
- fngjdflmdflg 2y agoRelated: https://github.com/uutils/coreutils https://github.com/uutils/coreutils "Cross-platform Rust rewrite of the GNU coreutils"
- gkfasdfasdf 2y agoIMO the killer feature of eza/exa is not the pretty colors but the git integration - being able to see the git status of individual files in a listing (ignored, modified, etc) is pretty handy.
- ttyprintk 2y agoTotally —- any idea why eza claims exa doesn’t support it? I know that’s wrong.
- gkfasdfasdf 2y agoI don't know, I do recall exa was a little finicky about linking with libgit2 - maybe some distros didn't come with it linked by default.
- ttyprintk 2y agoAh, good point.
- anthk 2y agoHints on bare ls, either GNU or BSD: - the -F flag give hints on items. Man ls. - never parse ls's output - color isn't always needed, see -F
- sandreas 2y agoThere is also 'lsd' but I still prefer eza. For everyone interested there is a lot of modern command line tools I nowadays prefer over the old stuff: bat - cat with highlight difftastic - better diff gdu - ncdu for ssds (disk space analyser) zoxide - modern cd fd - find alternative rg - ripgrep (grep) fzf - fuzzy finder jless - json viewer with mouse folding dra - download and install release assets lazygit - git TUI lazydocker - docker TUI yazi - file manager with image preview zellij - better tmux / screen starship - cross shell prompt config Have fun
- gkfasdfasdf 2y agoGreat list! I would also add: viddy, a replacement for watch that includes history
- magarnicle 2y agoI didn't find zellij to be better than screen. The tabs/screens are not numbered correctly so switching directly to them requires manually counting. A non-starter for me.
- lilyball 2y agoIf you don't like the default tab bar, you can use the zjstatus plugin (https://github.com/dj95/zjstatus https://github.com/dj95/zjstatus) to replace it with a customizable one that can show the tab index.
- magarnicle 2y agoFrom memory the index is different to the position, so if you rearrange our delete tabs the numbers become meaningless. I submitted a PR but the developers wanted it to be a separate plugin for just this. I decided it wasn't for me.
- heavyset_go 2y agoAs someone who defaults to lsd, is there any reason why you prefer eza to it?
- quasarj 2y agoWhat happened to Exa?
- phlip9 2y agoCan definitely recommend eza (prev. exa). I've used it as an ls replacement for a long time with zero problems. If anyone's using nix home-manager, here's my config for inspiration: programs.eza = { enable = true; # In list view, include a column with each file's git status. git = true; }; programs.bash.shellAliases = { ks = "eza"; sl = "eza"; l = "eza"; ls = "eza"; ll = "eza -l"; la = "eza -a"; lt = "eza --tree"; lla = "eza -la"; };