Eza : un remplaçant moderne et maintenu de `ls`
(github.com/eza-community)- eza est un outil CLI moderne qui remplace la commande de listage de fichiers
lssur Unix/Linux, avec pour objectif d’offrir davantage de fonctionnalités et de meilleurs réglages par défaut - Il distingue les types de fichiers et les métadonnées par couleurs, reconnaît les liens symboliques, les attributs étendus et les informations Git, et se présente sous la forme d’un binaire unique petit et rapide
- Par rapport à
exa, il ajoute la correction du Grid Bug, les hyperliens, les détails des points de montage, les contextes SELinux, l’état des dépôts Git, des dates relatives lisibles, des correctifs de sécurité, les couleurs de terminalbrightet la configurationtheme.yml - Il peut être installé sur Windows, macOS et Linux, et dans un environnement Nix flake, il peut être compilé puis exécuté avec
nix run github:eza-community/eza - Son système d’options n’est pas totalement identique à celui de
ls, mais il permet d’ajuster finement l’affichage du listage de fichiers via les options d’affichage, de filtrage, de liste longue et de thème
L’expérience de remplacement de ls proposée par eza
- eza est une alternative moderne à
ls, l’ancienne commande de listage de fichiers incluse dans les systèmes Unix et Linux - Son objectif principal est de proposer une version plus riche en fonctionnalités et plus conviviale que
ls - Il distingue les types de fichiers et les métadonnées par des couleurs
- Il reconnaît les liens symboliques, les attributs étendus et les informations Git
- Il est petit, rapide et distribué sous forme de binaire unique
Fonctionnalités ajoutées par rapport à exa
- eza inclut de nombreuses fonctionnalités absentes de
exa- correction du « The Grid Bug » introduit dans
exa2021 - prise en charge des hyperliens
- affichage des détails des points de montage
- affichage des contextes SELinux
- affichage de l’état des dépôts Git
- dates relatives lisibles par un humain
- plusieurs correctifs de sécurité
- prise en charge des couleurs de terminal
bright - correctifs de bugs mineurs et autres changements
- fichier de configuration
theme.ymlpour personnaliser les couleurs et les icônes
- correction du « The Grid Bug » introduit dans
Exécution et installation
- Dans un environnement prenant en charge Nix flake, vous pouvez essayer eza avec la commande suivante
nix run github:eza-community/eza
- Nix compile ensuite eza avant de l’exécuter
- Pour passer des arguments, ajoutez les options après
--, comme cecinix run github:eza-community/eza -- -ol
- eza est disponible sur Windows, macOS et Linux
- Les méthodes d’installation selon la plateforme et la distribution sont détaillées dans INSTALL.md
Organisation des options en ligne de commande
- Les options d’eza sont très proches de celles de
ls, sans être totalement identiques -
Options d’affichage
-1,--oneline: affiche un élément par ligne-G,--grid: affiche les éléments en grille, c’est l’option par défaut-l,--long: affiche les détails étendus et les attributs-R,--recurse: parcours récursif des répertoires-T,--tree: affiche récursivement les répertoires sous forme d’arborescence-F,--classify=(when): affiche un indicateur de type à côté du nom du fichier--colour=(when),--color=(when): définit quand utiliser les couleurs du terminal--icons=(when): définit quand afficher les icônes--hyperlink=(when): définit quand afficher les éléments comme hyperliens--absolute=(mode): définit la manière d’afficher le chemin absolu des éléments
-
Options de filtrage
-a,--all: affiche les fichiers cachés et les dotfiles-d,--treat-dirs-as-files: liste les répertoires comme des fichiers ordinaires-L,--level=(depth): limite la profondeur de récursion-s,--sort=(field): définit le champ de tri--group-directories-first: affiche les répertoires en premier--group-directories-last: affiche les répertoires en dernier-D,--only-dirs: affiche uniquement les répertoires-f,--only-files: affiche uniquement les fichiers--git-ignore: ignore les fichiers présents dans.gitignore-I,--ignore-glob=(globs): ignore les fichiers correspondant à des motifs glob séparés par des barres verticales- passer
--alldeux fois affiche aussi les répertoires.et..
Liste longue et informations liées à Git
- Les options de liste longue sont disponibles avec
--longou-l - Des options sont proposées pour la taille des fichiers et les permissions
-b,--binary: affiche la taille des fichiers avec des préfixes binaires-B,--bytes: affiche la taille des fichiers en octets sans préfixe-o,--octal-permissions: affiche les permissions au format octal--no-permissions,--no-filesize,--no-user,--no-time: supprime l’affichage de chaque champ correspondant
- Des options sont proposées pour le système de fichiers et les métadonnées
-H,--links: affiche le nombre de liens physiques-i,--inode: affiche le numéro d’inode-M,--mounts: affiche les détails de montage, disponible uniquement sur Linux et macOS-Z,--context: affiche le contexte de sécurité-@,--extended: affiche les attributs étendus et leur taille--total-size: affiche la taille récursive des répertoires
- L’affichage d’informations Git est également pris en charge
--git: affiche l’état Git de chaque fichier suivi ou ignoré--git-repos: affiche l’état Git de chaque répertoire suivi--git-repos-no-status: indique seulement si un répertoire est un dépôt Git, avec de meilleures performances--no-git: ignore toujours--git,--git-repos,--git-repos-no-statuset supprime l’affichage de l’état Git
- Les formats de date pris en charge sont
default,iso,long-iso,full-iso,relative, ou un format personnalisé de la forme+<FORMAT>- exemple :
+%Y-%m-%d %H:%Maffiche au format2023-09-30 13:00 - pour plus de détails sur les chaînes de format, consultez la page de manuel
eza(1)et la documentation de chrono
- exemple :
- Les pages de manuel sont disponibles dans le répertoire man du dépôt et, depuis la version
[0.18.13] - 2024-04-25, aussi viaman ezadans le terminal
Personnalisation du thème
- eza a récemment ajouté la prise en charge du fichier
theme.yml - Dans
theme.yml, vous pouvez définir les options de thème auparavant disponibles via les variables d’environnementLS_COLORSetEXA_COLORS - Il propose aussi des options permettant d’assigner des icônes différentes selon le type de fichier et l’extension
- Si les variables d’environnement existantes sont définies, elles continuent de fonctionner pour assurer la rétrocompatibilité et restent prioritaires
- Des thèmes prêts à l’emploi sont disponibles dans le dépôt officiel eza-themes, où vous pouvez aussi contribuer
- Un fichier de thème d’exemple est disponible dans
docs/theme.yml - Le fichier de thème doit être placé dans le répertoire indiqué par la variable d’environnement
EZA_CONFIG_DIR, ou sera recherché par défaut dans$XDG_CONFIG_HOME/eza - Pour plus de détails, consultez eza_colors-explanation.5.md et docs/theme.yml
Contribution
- Pour contribuer à eza, vous devez suivre le code of conduct
- Les informations concrètes pour participer au développement se trouvent dans CONTRIBUTING.md
1 commentaires
Commentaires Hacker News
Dans les listes de répertoires, les dates lisibles par un humain sont particulièrement agaçantes
Quand je cherche quelque chose que j’ai copié dans un dossier hier vers 11 h du matin et que tout s’affiche comme « 1 day ago », ça ne m’aide pas. J’ai besoin de la date et de l’heure ; les forums comme HN devraient aussi afficher la date/heure exacte, puis ajouter « 7 hours ago » à côté si nécessaire.
Je ne comprends pas pourquoi on retire volontairement de l’information, et je me demande si c’est une conséquence de tendances comme le défilement infini.
J’essaie de toujours le faire quand j’écris du HTML.
(https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ti...)
Même si vous vous souvenez qu’une date précise était le lendemain de l’anniversaire d’un ami et que vous essayez de retrouver un élément, si l’affichage se limite à « three months ago », vous devez fouiller un mois de données.
Il suffit de fournir d’abord l’heure détaillée, et d’ajouter aussi l’indication « il y a quelques jours » si on le souhaite.
Il y a aussi
lsd, mais je préfère toujours ezaPour ceux que ça intéresse, voici des outils modernes en ligne de commande que j’utilise aujourd’hui à la place d’anciens outils :
batest uncatavec coloration syntaxique,difftasticest un meilleurdiff,gduest unncdupour SSD,zoxideest uncdmoderne,fdest une alternative àfind,rgestripgrep,fzfest un outil de recherche floue,jlessest un visualiseur JSON avec repli à la souris,drasert à télécharger/installer des assets de releases,lazygitest une TUI Git,lazydockerest une TUI Docker,yaziest un gestionnaire de fichiers avec prévisualisation d’images,zellijest un meilleurtmux/screen, etstarshipest un outil de configuration de prompt utilisable avec plusieurs shells.taskest une alternative aux Makefile,hyperfineest un outil de benchmark,vegetaest un outil de test de charge, etsdest unsedmeilleur et plus intuitif.Il y a aussi le trio JSON :
jqest le processeur JSON bien connu,jcconvertit la sortie de nombreux outils CLI en JSON, etgronrend le JSON facile à passer àgrep.fdetrgignorent par défaut les éléments inclus dans.gitignore. Si vous les considérez comme de simples remplaçants defind, vous risquez d’être surpris. La discussion liée se trouve en [0].Quand on recommande ce genre d’outils, il faut le préciser clairement. C’est facile à manquer si l’on ne lit pas la documentation. Personnellement, j’aimerais que ces outils de remplacement des coreutils gardent des valeurs par défaut plus proches de celles des outils d’origine. S’ils se présentent comme « une alternative simple, rapide et conviviale à find », ils devraient respecter les valeurs par défaut d’origine afin de réduire les surprises pour les nouveaux utilisateurs. Les alias existent, donc je préfère mettre
alias fd='fd --ignore'dans~/.${SHELL##*/}rcplutôt quealias fd='fd --no-ignore'.Astuce : si vous voulez utiliser la version sans alias, utilisez
\command. Par exemple, j’utilisealias grep='grep --color=always --no-messages --binary-files=without-match, mais l’option de couleur modifie la représentation des caractères et peut provoquer des erreurs lorsqu’on pipe verscurl. Ça n’arrive pas dans tous les pipelines, mais la première fois c’est assez déroutant. On peut le vérifier avececho "Hello world" | \grep --color=always "Hello" | hexdump, puis!!:s^always^never.[0] https://github.com/sharkdp/fd/issues/612
https://github.com/ibraheemdev/modern-unix
zellijsoit meilleur quescreen. Les onglets/écrans ne sont pas numérotés correctement, donc pour basculer directement il faut compter soi-même, et c’est difficile à accepter.GNU ls est maintenu. Il y a eu des commits affectant le fichier
ls.cles 2024-06-24 et 2024-06-27, il y a moins d’un mois.La liste de diffusion GNU Coreutils est également assez active. Ce projet semble utiliser « maintained » au sens de « activement développé ».
ezaest un fork.exan’a pas été maintenu pendant environ un an avant que la seule personne ayant les droits d’écriture sur le dépôt ne le marque officiellement comme deprecated.Maintenant que le fork existe depuis un bon moment, tout le monde ne connaît pas
exa, et l’intention de cette formulation est devenue beaucoup moins claire. Vu qu’il y a des réactions similaires, il est peut-être temps de mettre le texte à jour.lsn’est pas maintenu, mais que c’est une alternative maintenue, en tant que fork d’exa, l’alternative àlsqui n’est plus maintenue.Depuis que je suis passé au shell fish, mon utilisation de
lsa chuté de 100 %. La commande intégrée Alt + l affiche le contenu du répertoire, ce qui est très pratique, et l’historique du shell est aussi plus proprelsà la variable d’environnementHISTIGNORE: https://superuser.com/questions/232885/can-you-share-wisdom-...lsdans fish, c’est une configuration qui lance automatiquementlsquand je change de répertoirefunction ls_on_cd --on-variable PWDlsend__bash_ctrl_n(), et plusieurs outils dans mes dotfiles redéfinissent ces fonctions. Par exemple, si Git est installé, je configure__bash_ctrl_e()pour lancergit statusetgit loglsverseza, cette fonction semble exécutereza. Au final, on dirait qu’elle lance simplementlslsarrivaient juste après uncd. Désormais, presque tous lescdlancent automatiquementlsDans Bash, ma fonction
cd()appellebuiltin cd "$@" && ls -l, et dans fish, aprèsbuiltin cd $argv, si aucune erreur ne survient et qu’il ne s’agit pas d’un retour au home, elle exécutedirGlobalement, les outils de terminal qui imposent les couleurs pour distinguer les types ou attributs de fichiers me gênent. Le
lsde beaucoup de distributions est aussi configuré comme ça, mais je supprime cette configuration et j’utilise les valeurs par défautJ’utilise un fond de terminal reposant pour les yeux, et ces schémas de couleurs finissent toujours par entrer en conflit avec le fond ou inclure des couleurs difficiles à lire. La sortie de
lsou de ses alternatives n’a pas besoin de couleur ; ce que fournitls -AFCme suffit largement[0] https://github.com/chriskempson/base16
[1] https://tinted-theming.github.io/base16-gallery/
Il devrait quand même y avoir une solution, et il suffit de définir une valeur quelconque pour
$NO_COLOR. https://no-color.orgIl est tout à fait légitime de signaler un bug aux outils qui ne vérifient pas et ne respectent pas cette variable d’environnement
vivid[1] pour choisir un thème adapté au fond du terminal, puis de charger dans le shell la variable LS_COLORS générée[1]: https://github.com/sharkdp/vivid/
C’est étrange que le README n’indique pas que
ezaest un fork deexaJe me demande pourquoi autant de nouvelles versions des utilitaires GNU sont publiées sous licence MIT. Il semble y en avoir pas mal
ls. Les GNU coreutils, qui incluentls, étaient eux aussi à l’origine de nouvelles versions d’utilitaires propriétaires d’AT&T ou d’utilitaires sous licence BSDPourquoi un remplaçant de
lsaurait-il besoin de Kerberos et de SSH ?Quand on regarde
ldd /usr/bin/eza, il est lié à pas mal de bibliothèques, dontlibgit2,libgssapi_krb5,libmbedtls,libssh2,libkrb5,libcrypto,libzstd, etc.ls, ça fait quand même beaucoup trop de dépendancesSur un clavier QWERTY,
ezaest une combinaison de trois lettres assez atroce. L’un des avantages dels, c’est que c’est une combinaison de touches très rapide à taperOn peut bien créer un alias, mais pour des raisons comme la compatibilité, ça me paraît un peu bizarre
eza, et avant çaexa, en alias dels,lletlll, et je n’ai jamais rencontré de problème de compatibilitéJ’ai aussi installé
slpour m’entraîner à ne pas me tromper en tapantezaressemble à une amélioration. En Dvorak,lscorrespond àp-en QWERTY, donc les deux sont des touches de l’auriculaire droitDe toute façon, qui utilise
ls? On se contente d’utiliser l’autocomplétion avec Tab jusqu’à ce que le fichier voulu apparaisseBlague à part, je me demande pourquoi on affirme que
lsn’est plus maintenuls[0]https://github.com/ogham/exa
lsest maintenu dans le cadre du shell ou de coreutilsCela dit,
ezaest un dérivé deexa, et à ma connaissanceexan’est plus maintenu