Eza: un reemplazo moderno y mantenido para `ls`
(github.com/eza-community)- eza es una herramienta CLI moderna que reemplaza el comando de listado de archivos
lsde Unix/Linux, con el objetivo de ofrecer más funciones y mejores valores predeterminados - Distingue los tipos de archivo y los metadatos con colores, reconoce enlaces simbólicos, atributos extendidos e información de Git, y se distribuye como un binario único pequeño y rápido
- Frente a
exa, agrega correcciones para el Grid Bug, hipervínculos, detalles de puntos de montaje, contexto de SELinux, estado de repositorios Git, fechas relativas legibles para humanos, correcciones de seguridad, colores de terminalbrighty configuración mediantetheme.yml - Puede instalarse en Windows, macOS y Linux, y en entornos con Nix flake se puede compilar y ejecutar con
nix run github:eza-community/eza - Tiene un sistema de opciones similar a
ls, aunque no idéntico, y permite ajustar en detalle la forma de mostrar listados mediante opciones de visualización, filtrado, listado largo y configuración de temas
La experiencia de reemplazo de ls que ofrece eza
- eza es una alternativa moderna al antiguo comando de listado de archivos
lsincluido en los sistemas operativos Unix y Linux - Su objetivo principal es ofrecer una versión con más funciones y más amigable para el usuario que
ls - Distingue los tipos de archivo y los metadatos con colores
- Reconoce enlaces simbólicos, atributos extendidos e información de Git
- Es pequeño, rápido y se distribuye como un binario único
Funciones agregadas frente a exa
- eza incluye muchas funciones que no estaban en
exa- Corrección de “The Grid Bug”, introducido en
exa2021 - Soporte para hipervínculos
- Salida con detalles de puntos de montaje
- Salida con contexto de SELinux
- Salida con estado de repositorios Git
- Fechas relativas legibles para humanos
- Varias correcciones de seguridad
- Soporte para colores de terminal
bright - Correcciones menores de errores y otros cambios
- Archivo de configuración
theme.ymlpara personalizar colores e íconos
- Corrección de “The Grid Bug”, introducido en
Ejecución e instalación
- En entornos con soporte para Nix flake, puedes probar eza con el siguiente comando
nix run github:eza-community/eza
- Nix compila eza y luego lo ejecuta
- Para pasar argumentos, agrega las opciones después de
--nix run github:eza-community/eza -- -ol
- eza puede usarse en Windows, macOS y Linux
- Los métodos de instalación por plataforma y distribución están en INSTALL.md
Estructura de las opciones de línea de comandos
- Las opciones de eza son muy parecidas a las de
ls, pero no exactamente iguales -
Opciones de visualización
-1,--oneline: muestra un elemento por línea-G,--grid: muestra los elementos en una cuadrícula y es el valor predeterminado-l,--long: muestra detalles y atributos ampliados-R,--recurse: recorre directorios de forma recursiva-T,--tree: muestra directorios en forma de árbol de manera recursiva-F,--classify=(when): muestra indicadores de tipo junto al nombre del archivo--colour=(when),--color=(when): especifica cuándo usar colores de terminal--icons=(when): especifica cuándo mostrar íconos--hyperlink=(when): especifica cuándo mostrar elementos como hipervínculos--absolute=(mode): especifica cómo mostrar la ruta absoluta de los elementos
-
Opciones de filtrado
-a,--all: muestra archivos ocultos y archivos dot-d,--treat-dirs-as-files: lista los directorios como si fueran archivos normales-L,--level=(depth): limita la profundidad de la recursión-s,--sort=(field): especifica el campo de ordenamiento--group-directories-first: muestra primero los directorios--group-directories-last: muestra los directorios al final-D,--only-dirs: muestra solo directorios-f,--only-files: muestra solo archivos--git-ignore: ignora archivos presentes en.gitignore-I,--ignore-glob=(globs): ignora archivos según patrones glob separados por|- Si se pasa
--alldos veces, también se muestran los directorios.y..
Listado largo e información relacionada con Git
- Al usar
--longo-l, se pueden usar las opciones de listado largo - Ofrece opciones relacionadas con tamaño de archivo y permisos
-b,--binary: muestra tamaños de archivo con prefijos binarios-B,--bytes: muestra tamaños de archivo en bytes sin prefijos-o,--octal-permissions: muestra los permisos en formato octal--no-permissions,--no-filesize,--no-user,--no-time: omite la salida de cada campo correspondiente
- Ofrece opciones relacionadas con sistema de archivos y metadatos
-H,--links: muestra la cantidad de enlaces duros-i,--inode: muestra el número de inode-M,--mounts: muestra detalles de montaje, disponible solo en Linux y macOS-Z,--context: muestra el contexto de seguridad-@,--extended: muestra atributos extendidos y tamaño--total-size: muestra el tamaño de directorios recursivos
- También admite salida relacionada con Git
--git: muestra el estado de Git de cada archivo rastreado o ignorado--git-repos: muestra el estado de Git de cada directorio rastreado--git-repos-no-status: solo muestra si un directorio es un repositorio Git y es más rápido--no-git: ignora siempre--git,--git-reposy--git-repos-no-status, y suprime la salida del estado de Git
- El formato de hora admite
default,iso,long-iso,full-iso,relativeo un formato personalizado con la forma+<FORMAT>- Ejemplo:
+%Y-%m-%d %H:%Mproduce una salida como2023-09-30 13:00 - Para más detalles sobre las cadenas de formato, consulta la página de manual
eza(1)y la documentación de chrono
- Ejemplo:
- La página de manual puede verse en el directorio man del repositorio, y desde la versión
[0.18.13] - 2024-04-25también puede usarse desde la terminal conman eza
Personalización de temas
- eza agregó recientemente soporte para archivos
theme.yml - En
theme.ymlse pueden definir las opciones de tema existentes que antes podían usarse en las variables de entornoLS_COLORSyEXA_COLORS - También ofrece opciones para asignar íconos distintos según el tipo de archivo y la extensión
- Si las variables de entorno existentes ya están configuradas, siguen funcionando por compatibilidad hacia atrás y tienen prioridad
- Los temas ya preparados pueden revisarse en el repositorio oficial eza-themes o puedes contribuir con los tuyos
- El archivo de tema de ejemplo está en
docs/theme.yml - El archivo de tema puede colocarse en el directorio definido por la variable de entorno
EZA_CONFIG_DIR, o de forma predeterminada se busca en$XDG_CONFIG_HOME/eza - Para más detalles, consulta eza_colors-explanation.5.md y docs/theme.yml
Contribuciones
- Para contribuir a eza, debes seguir el code of conduct
- La información práctica para participar en el desarrollo está en CONTRIBUTING.md
1 comentarios
Comentarios de Hacker News
En los listados de directorios, las fechas legibles para humanos me molestan especialmente.
Si estoy buscando algo que copié a una carpeta ayer alrededor de las 11 a. m. y todo aparece como “1 day ago”, no ayuda. Necesito la fecha y la hora; y lo mismo aplica a foros como HN: que muestren primero la fecha/hora exacta y, si hace falta, agreguen también “7 hours ago”.
No entiendo por qué se elimina información a propósito, y me pregunto si es consecuencia de tendencias como el desplazamiento infinito.
Intento usarla siempre que escribo HTML.
(https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ti...)
Aunque recuerdes que una fecha específica fue el día después del cumpleaños de un amigo e intentes encontrar un elemento, si lo único que se muestra es “three months ago”, tienes que revisar material de todo un mes.
Basta con dar primero la hora detallada y, si se quiere, mostrar también “hace unos días”.
También existe
lsd, pero sigo prefiriendo eza.Para quienes estén interesados, estos son algunos comandos modernos que hoy uso en lugar de herramientas antiguas:
batescatcon resaltado de sintaxis;difftastices undiffmejor;gduesncdupara SSD;zoxidees uncdmoderno;fdes una alternativa afind;rgesripgrep;fzfes un buscador difuso;jlesses un visor de JSON con plegado mediante mouse;dradescarga/instala recursos de releases;lazygites una TUI para Git;lazydockeres una TUI para Docker;yazies un gestor de archivos con vista previa de imágenes;zellijes un mejortmux/screen;starshipes una herramienta de configuración del prompt para varias shells.taskes una alternativa a Makefile;hyperfinees una herramienta de benchmark;vegetaes una herramienta de pruebas de carga;sdes unsedmejor y más intuitivo.También está el trío de JSON:
jqes el conocido procesador de JSON;jcconvierte la salida de varias herramientas CLI a JSON;gronhace que JSON sea más fácil de usar congrep.fdyrgignoran de forma predeterminada los elementos incluidos en.gitignore. Si piensas que son simples reemplazos defind, puede sorprenderte. La discusión relacionada está en [0].Al recomendar estas herramientas, hay que dejar esto claro. Es fácil pasarlo por alto si no lees la documentación. Personalmente, me gustaría que este tipo de reemplazos de coreutils mantuvieran valores predeterminados más parecidos a las herramientas originales. Si se promocionan como “una alternativa simple, rápida y fácil de usar a find”, deberían respetar los valores predeterminados del original para reducir las sorpresas de los nuevos usuarios. Como existen los alias, creo que es mejor poner
alias fd='fd --ignore'en~/.${SHELL##*/}rcquealias fd='fd --no-ignore'.Como consejo: si quieres usar la versión sin el alias aplicado, puedes usar
\command. Por ejemplo, usoalias grep='grep --color=always --no-messages --binary-files=without-match, pero la opción de color cambia la representación de los caracteres y puede causar errores si lo canalizas acurl. No pasa en todos los pipes, pero cuando lo encuentras por primera vez puede desconcertar bastante. Se puede comprobar conecho "Hello world" | \grep --color=always "Hello" | hexdumpy luego!!:s^always^never.[0] https://github.com/sharkdp/fd/issues/612
https://github.com/ibraheemdev/modern-unix
zellijfuera mejor quescreen. Las pestañas/pantallas no se numeran correctamente, así que para cambiar directamente tengo que contarlas a mano, y eso me cuesta aceptarlo.GNU ls sí recibe mantenimiento. Hubo commits que afectaron al archivo
ls.cincluso el 2024-06-24 y el 2024-06-27, hace menos de un mes.La lista de correo de GNU Coreutils también es bastante activa. Parece que este proyecto usa “maintained” con el sentido de “en desarrollo activo”.
ezaes un fork.exaestuvo sin mantenimiento durante aproximadamente un año antes de que la única persona con permisos de escritura en el repositorio lo marcara oficialmente como deprecated.Ya pasó bastante tiempo desde el fork, así que no todos conocen
exa, y la intención de esa frase se volvió mucho menos clara. Como hay reacciones parecidas, creo que ya es momento de actualizar el texto.lsno reciba mantenimiento, sino que se trata de un reemplazo mantenido como fork deexa, un reemplazo delsque ya no se mantiene.Después de cambiarme al shell fish, mi uso de
lsbajó 100%. El comando integrado Alt + l muestra el contenido del directorio, así que es muy útil, y el historial del shell también queda más limpio.lsa la variable de entornoHISTIGNORE: https://superuser.com/questions/232885/can-you-share-wisdom-...lsen fish fue una configuración para ejecutarlsautomáticamente al cambiar de directoriofunction ls_on_cd --on-variable PWDlsend__bash_ctrl_n(), y varias herramientas de mis dotfiles sobrescriben esas funciones. Por ejemplo, si Git está instalado, configuro__bash_ctrl_e()para que ejecutegit statusygit log.lscomo alias deeza, esta función parece ejecutareza. Al final parece que simplemente ejecutals.lsera justo después decd, así que lo agregué a mis archivos de inicio. Ahora casi todos loscdejecutanlsautomáticamenteEn Bash, en una función
cd()llamo abuiltin cd "$@" && ls -l; en fish, después debuiltin cd $argv, si no hay error y no es un cambio al home, ejecutodir.En general me resultan incómodas las herramientas de terminal que imponen colores para distinguir tipos o atributos de archivos. El
lsde muchas distribuciones también viene configurado así, pero yo elimino esa configuración y uso los valores predeterminadosUso un fondo de terminal cómodo para la vista, y estos esquemas de color siempre chocan con el fondo o incluyen colores difíciles de leer. No necesito colores en la salida de
lsni de sus reemplazos; con lo que ofrecels -AFCes suficiente.[0] https://github.com/chriskempson/base16
[1] https://tinted-theming.github.io/base16-gallery/
Aun así, debería haber una solución, y basta con establecer algún valor en
$NO_COLOR. https://no-color.orgEs completamente razonable abrir un reporte de bug para las herramientas que no revisan y respetan esta variable de entorno.
vivid[1] para elegir un tema que combine con el fondo de tu terminal y cargar en el shell la variable LS_COLORS generada[1]: https://github.com/sharkdp/vivid/
Es raro que el README no diga que
ezaes un fork deexa.Me pregunto por qué tantas versiones nuevas de utilidades GNU se están haciendo con licencia MIT. Parece que son bastantes.
ls. GNU coreutils, que incluyels, también fue originalmente una nueva versión de utilidades propietarias de AT&T o de utilidades con licencia BSD.¿Por qué un reemplazo de
lsnecesita Kerberos y SSH?Si miras
ldd /usr/bin/eza, está enlazado con bastantes bibliotecas comolibgit2,libgssapi_krb5,libmbedtls,libssh2,libkrb5,libcrypto,libzstd, etc.ls, son demasiadas dependencias.En un teclado QWERTY,
ezaes una combinación de tres letras bastante horrible. Una de las ventajas delses que es una combinación de teclas que se puede escribir muy rápidoPodría crear un alias, pero por razones como la compatibilidad se siente un poco raro.
eza, y antesexa, como alias dels,llylll, y nunca tuve problemas de compatibilidadTambién tengo instalado
slpara entrenarme a no teclearlo mal.ezaparece una mejora. En Dvorak,lsequivale ap-en QWERTY, así que ambas son teclas del meñique derecho.Al final, ¿quién usa
ls? Solo uso el autocompletado con Tab hasta que aparezca el archivo que necesitoBromas aparte, me da curiosidad por qué afirman que
lsya no recibe mantenimientols, sino a exa[0], que ya no recibe mantenimiento[0]https://github.com/ogham/exa
lsse mantiene como parte del shell o de coreutilsSolo que
ezaes una variante deexa, y hasta donde sé,exaya no recibe mantenimiento