Eza: substituto moderno e com manutenção ativa para o `ls`
(github.com/eza-community)- eza é uma ferramenta de CLI moderna que substitui o comando de listagem de arquivos
lsdo Unix/Linux, com o objetivo de oferecer mais recursos e padrões melhores - Diferencia com cores os tipos de arquivo e metadados, reconhece links simbólicos, atributos estendidos e informações de Git, e é distribuída como um binário único pequeno e rápido
- Em relação ao antigo
exa, adiciona correção do Grid Bug, hyperlinks, detalhes de pontos de montagem, contexto do SELinux, status de repositório Git, datas relativas legíveis por humanos, correções de segurança, cores de terminalbrighte configuração viatheme.yml - Pode ser instalada no Windows, macOS e Linux e, em ambientes com Nix flake, pode ser compilada e executada com
nix run github:eza-community/eza - Tem um conjunto de opções parecido com o do
ls, mas não idêntico, permitindo ajustar com precisão a forma de exibição da listagem por meio de opções de visualização, filtragem, listagem longa e tema
A experiência de substituição do ls oferecida pelo eza
- eza é uma alternativa moderna ao antigo comando de listagem de arquivos
ls, incluído nos sistemas operacionais Unix e Linux - Seu objetivo principal é oferecer uma versão com mais recursos e mais amigável ao usuário do que o
ls - Diferencia com cores os tipos de arquivo e os metadados
- Reconhece links simbólicos, atributos estendidos e informações de Git
- É pequeno, rápido e distribuído como um binário único
Recursos adicionados em relação ao exa
- O eza inclui vários recursos que não existiam no
exa- Correção do “The Grid Bug”, introduzido no
exa2021 - Suporte a hyperlinks
- Exibição de detalhes de pontos de montagem
- Exibição de contexto do SELinux
- Exibição do status de repositórios Git
- Datas relativas legíveis por humanos
- Várias correções de segurança
- Suporte a cores de terminal
bright - Pequenas correções de bugs e outras mudanças
- Arquivo de configuração
theme.ymlpara personalizar cores e ícones
- Correção do “The Grid Bug”, introduzido no
Execução e instalação
- Em ambientes com suporte a Nix flake, é possível testar o eza com o seguinte comando
nix run github:eza-community/eza
- O Nix compila o eza e depois o executa
- Para passar argumentos, adicione opções após
--, assim:nix run github:eza-community/eza -- -ol
- O eza pode ser usado em Windows, macOS e Linux
- Os métodos de instalação por plataforma e distribuição estão em INSTALL.md
Estrutura das opções de linha de comando
- As opções do eza são muito parecidas com as do
ls, mas não são exatamente iguais -
Opções de exibição
-1,--oneline: mostra um item por linha-G,--grid: mostra os itens em grade e é o padrão-l,--long: mostra detalhes e atributos estendidos-R,--recurse: percorre diretórios recursivamente-T,--tree: mostra diretórios recursivamente em formato de árvore-F,--classify=(when): exibe um indicador de tipo ao lado do nome do arquivo--colour=(when),--color=(when): define quando usar cores no terminal--icons=(when): define quando mostrar ícones--hyperlink=(when): define quando exibir itens como hyperlinks--absolute=(mode): define como mostrar o caminho absoluto dos itens
-
Opções de filtragem
-a,--all: mostra arquivos ocultos e dotfiles-d,--treat-dirs-as-files: lista diretórios como se fossem arquivos comuns-L,--level=(depth): limita a profundidade da recursão-s,--sort=(field): define o campo de ordenação--group-directories-first: mostra diretórios primeiro--group-directories-last: mostra diretórios por último-D,--only-dirs: mostra apenas diretórios-f,--only-files: mostra apenas arquivos--git-ignore: ignora arquivos presentes em.gitignore-I,--ignore-glob=(globs): ignora arquivos com padrões glob separados por pipe- Ao passar
--allduas vezes, os diretórios.e..também são exibidos
Listagem longa e informações relacionadas a Git
- Ao usar
--longou-l, é possível usar as opções de listagem longa - Há opções relacionadas a tamanho de arquivo e permissões
-b,--binary: mostra o tamanho do arquivo com prefixos binários-B,--bytes: mostra o tamanho do arquivo em bytes, sem prefixos-o,--octal-permissions: mostra permissões em formato octal--no-permissions,--no-filesize,--no-user,--no-time: suprime a saída de cada campo correspondente
- Há opções relacionadas a sistema de arquivos e metadados
-H,--links: mostra o número de hard links-i,--inode: mostra o número do inode-M,--mounts: mostra detalhes de montagem; disponível apenas em Linux e macOS-Z,--context: mostra o contexto de segurança-@,--extended: mostra atributos estendidos e tamanho--total-size: mostra o tamanho de diretórios recursivos
- Também há suporte a saída relacionada ao Git
--git: mostra o status Git de cada arquivo rastreado ou ignorado--git-repos: mostra o status Git de cada diretório rastreado--git-repos-no-status: mostra apenas se o diretório é um repositório Git, com maior velocidade--no-git: ignora sempre--git,--git-repose--git-repos-no-status, suprimindo a exibição de status Git
- O formato de hora aceita
default,iso,long-iso,full-iso,relativeou um formato personalizado no estilo+<FORMAT>- Exemplo:
+%Y-%m-%d %H:%Mgera saída no formato2023-09-30 13:00 - Para mais detalhes sobre strings de formatação, consulte a página de manual
eza(1)e a documentação do chrono
- Exemplo:
- A página de manual pode ser vista no diretório man do repositório e, desde a versão
[0.18.13] - 2024-04-25, também pode ser usada no terminal comman eza
Personalização de tema
- O eza adicionou recentemente suporte ao arquivo
theme.yml - Em
theme.yml, é possível definir as opções de tema que antes podiam ser usadas nas variáveis de ambienteLS_COLORSeEXA_COLORS - Também há opções para definir ícones diferentes por tipo de arquivo e por extensão
- Se as variáveis de ambiente antigas já estiverem definidas, elas continuam funcionando e têm prioridade, por compatibilidade retroativa
- Temas prontos podem ser consultados ou receber contribuições no repositório oficial eza-themes
- O arquivo de tema de exemplo está em
docs/theme.yml - O arquivo de tema pode ser colocado no diretório definido pela variável de ambiente
EZA_CONFIG_DIRou, por padrão, em$XDG_CONFIG_HOME/eza - Mais detalhes estão em eza_colors-explanation.5.md e docs/theme.yml
Contribuição
- Para contribuir com o eza, é preciso seguir o code of conduct
- As informações sobre participação prática no desenvolvimento estão em CONTRIBUTING.md
1 comentários
Comentários do Hacker News
As datas legíveis por humanos em listagens de diretório são especialmente irritantes
Se estou procurando algo que copiei para uma pasta ontem por volta das 11 da manhã e tudo aparece como “1 day ago”, isso não ajuda. Eu preciso da data e da hora, e o mesmo vale para fóruns como o HN: mostre a data/hora exata e, se quiser, acrescente algo como “7 hours ago”
Não entendo por que remover informação de propósito, e fico curioso se isso é resultado da lógica de fluxos como scroll infinito
Eu sempre tento usar isso ao escrever HTML
(https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ti...)
Mesmo que você se lembre de uma data específica como o dia seguinte ao aniversário de um amigo e tente encontrar algo, se o que aparece for só “three months ago”, você precisa vasculhar material de um mês inteiro
Basta fornecer primeiro o horário detalhado e, se quiser, também mostrar algo como “há alguns dias” junto
Existe também o
lsd, mas ainda prefiro o ezaPara quem tiver interesse, hoje em dia há várias ferramentas modernas de linha de comando que eu uso no lugar das antigas:
baté umcatcom destaque de sintaxe,difftasticé umdiffmelhor,gdué umncdupara SSD,zoxideé umcdmoderno,fdé uma alternativa aofind,rgé oripgrep,fzfé um buscador difuso,jlessé um visualizador de JSON com recolhimento via mouse,drabaixa/instala assets de releases,lazygité uma TUI para Git,lazydockeré uma TUI para Docker,yazié um gerenciador de arquivos com pré-visualização de imagens,zellijé melhor quetmux/screen, estarshipé uma ferramenta de configuração de prompt para vários shellstaské uma alternativa a Makefile,hyperfineé uma ferramenta de benchmark,vegetaé uma ferramenta de teste de carga, esdé umsedmelhor e mais intuitivoTambém existe o trio do JSON:
jqé o processador de JSON mais conhecido,jcconverte a saída de várias ferramentas de CLI em JSON, egrontorna JSON fácil de usar comgrepfdergignoram por padrão itens incluídos no.gitignore. Se você achar que são substitutos diretos dofind, pode se surpreender. Há uma discussão sobre isso em [0]Ao recomendar esse tipo de ferramenta, esse ponto deveria ser deixado bem claro. É fácil deixar passar se você não ler a documentação. Pessoalmente, eu gostaria que essas alternativas estilo coreutils mantivessem os padrões mais próximos das ferramentas originais. Se a divulgação diz “uma alternativa simples, rápida e amigável ao find”, então os padrões da ferramenta original deveriam ser respeitados para reduzir a surpresa de novos usuários. Como aliases existem, eu acho melhor ter
alias fd='fd --ignore'no~/.${SHELL##*/}rcdo quealias fd='fd --no-ignore'Como dica: se quiser usar a versão sem o alias aplicado, basta usar
\command. Por exemplo, eu usoalias grep='grep --color=always --no-messages --binary-files=without-matche a opção de cor pode alterar a representação dos caracteres, causando erro ao fazer pipe paracurl. Não acontece em todos os pipes, mas na primeira vez é bem desconcertante. Dá para verificar comecho "Hello world" | \grep --color=always "Hello" | hexdumpe depois!!:s^always^never[0] https://github.com/sharkdp/fd/issues/612
https://github.com/ibraheemdev/modern-unix
zellijseja melhor que oscreen. As abas/telas não são numeradas direito, então, para alternar diretamente, você precisa contar manualmente, e isso é difícil de aceitarO GNU ls é mantido, sim. Houve commits afetando o arquivo
ls.cem 2024-06-24 e 2024-06-27, ou seja, faz menos de um mêsA mailing list do GNU Coreutils também é bem ativa. Parece que esse projeto usa “maintained” no sentido de “em desenvolvimento ativo”
ezaforkou. Oexaficou cerca de um ano sem manutenção até a única pessoa com permissão de escrita no repositório marcá-lo oficialmente como deprecatedJá faz bastante tempo desde o fork, então nem todo mundo conhece o
exa, e a intenção dessa expressão ficou bem mais ambígua. Como há reações parecidas, talvez já seja hora de atualizar a redaçãolsnão seja mantido, mas sim que é uma alternativa mantida, como fork do substituto dolschamadoexa, que deixou de ser mantidoDepois que mudei para o shell fish, meu uso de
lscaiu 100%. O comando embutido Alt + l mostra o conteúdo do diretório, então é muito útil, e o histórico do shell também fica mais limpolsà variável de ambienteHISTIGNORE: https://superuser.com/questions/232885/can-you-share-wisdom-...lsno fish foi uma configuração para executarlsautomaticamente ao mudar de diretóriofunction ls_on_cd --on-variable PWDlsend__bash_ctrl_n(), e deixo várias ferramentas dos meus dotfiles sobrescreverem essas funções. Por exemplo, se o Git estiver instalado, configuro__bash_ctrl_e()para executargit statusegit logezaporque devo ter definido um alias delsparaeza. No fim, parece que só está executandolslsacontece logo apóscde adicionei isso ao arquivo de inicialização. Agora quase todocdexecutalsautomaticamenteNo Bash, chamo
builtin cd "$@" && ls -lna funçãocd(), e no fish deixo executardirdepois debuiltin cd $argvquando não há erro e não é uma ida para a homeEm geral, ferramentas de terminal que forçam o uso de cores para diferenciar tipos ou atributos de arquivos são desconfortáveis. O
lsda distribuição muitas vezes também vem configurado assim, mas eu removo essas configurações e uso o padrãoEu uso um fundo de terminal confortável para os olhos, e esses esquemas de cores sempre entram em conflito com o fundo ou incluem cores difíceis de ver. Não preciso de cores na saída do
lsnem de seus substitutos; o quels -AFCfornece já basta[0] https://github.com/chriskempson/base16
[1] https://tinted-theming.github.io/base16-gallery/
Ainda assim, deveria haver uma solução, e basta definir algum valor em
$NO_COLOR. https://no-color.orgÉ perfeitamente razoável abrir um bug report para ferramentas que não verificam nem respeitam essa variável de ambiente
vivid[1] para escolher um tema que combine com o fundo do terminal e carregar no shell a variável LS_COLORS gerada[1]: https://github.com/sharkdp/vivid/
É estranho que o README não diga que
ezaé um fork doexaFico curioso sobre por que tantas versões novas de utilitários GNU estão sendo feitas com licença MIT. Parece haver bastante disso
ls. O GNU coreutils, incluindo ols, originalmente também eram novas versões de utilitários proprietários da AT&T ou utilitários sob licença BSDPor que um substituto de
lsprecisa de Kerberos e SSH?ldd /usr/bin/ezamostra que ele está vinculado a várias bibliotecas, comolibgit2,libgssapi_krb5,libmbedtls,libssh2,libkrb5,libcrypto,libzstdetc.lsEm um teclado QWERTY,
ezaé uma combinação de três letras bem horrível. Uma das vantagens dolsé justamente ser uma combinação de teclas muito rápida de digitarDá para criar um alias, mas por questões como compatibilidade isso parece meio estranho
eza, e antes disso deexa, comols,llelll, e nunca tive problemas de compatibilidadeTambém deixo
slinstalado para me treinar a não digitar erradoezaparece uma melhora. No Dvorak,lsvirap-no equivalente ao QWERTY, então ambas ficam na tecla do dedo mínimo da mão direitaAfinal, quem usa
ls? A pessoa só fica apertando tab para autocompletar até aparecer o arquivo de que precisaBrincadeiras à parte, fiquei curioso sobre por que afirmam que
lsnão é mais mantidols, mas ao exa[0], que não recebe mais manutenção[0]https://github.com/ogham/exa
lscontinua sendo mantido como parte do shell ou do coreutilsSó que o
ezaé um fork doexae, até onde eu sei, oexanão é mais mantido