"Menos" no descomprime automáticamente los archivos comprimidos

55

En Fedora / Redhat / CentOS, el lesscomando parece detectar mágicamente un archivo comprimido y descomprimirlo sobre la marcha, por lo que puede hacer:

less my_stuff.csv.gz

Acabo de notar que esto no funciona en Ubuntu 11

less my_stuff.csv.gz
"my_stuff.csv.gz" may be a binary file.  See it anyway? 

He estado examinando mis máquinas virtuales CentOS para ver si hay algo de magia de alias de shell que lo hace funcionar, pero no parece haberlo. ¿El soporte gzip está integrado en el binario de CentOS?

Si alguien sabe cómo funciona esto en CentOS y / o cómo se puede hacer que funcione en Ubuntu, lo agradecería.

Soy consciente de que puedo hacer

zcat my_stuff.csv.gz | less

pero eso haría que mi teclado se desgastara más rápido.

AndrewR
fuente
2
En Ubuntu 16.04 less myfile.txt.gzfunciona de forma inmediata .
Pablo A

Respuestas:

42

lessno lo haga de manera predeterminada, pero hay una línea en el valor predeterminado ~/.bashrcque cambia el comportamiento predeterminado:

[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

Asegúrese de no eliminar ni comentar esta línea.
Con esto en su lugar, puede paginar archivos comprimidos y no comprimidos sin saberlo, como en

less /var/log/dpkg.log*

donde algunos de los registros se pueden comprimir y otros no.

Para la cuenta raíz accedida a través de sudousted no puede hacer lo mismo, pero hay dos soluciones:

  1. sudo zless file*
  2. sudo -E less file*

En el primer caso que utilicé zless, eso también funciona para archivos no comprimidos.
En la segunda agregué la -Eopción de sudopreservar las variables de entorno, para hacer menos trabajo como era de esperar.

enzotib
fuente
1
¿No está la primera línea presente en .bashrc por defecto? No recuerdo haberlo agregado y funciona a la perfección aquí (10.4).
johanvdw
2
@johanvdw: sí lo es: dije "hay una línea en el valor predeterminado ~/.bashrc". El OP podría haber modificado el suyo ~/.bashrc.
enzotib
Sólo que me gustaría añadir, que es mencionado en el sistema operativo RHEL donde esto funciona, verá el siguiente en env: LESSOPEN=|/usr/bin/lesspipe.sh %sEsto se realiza mediante un script que contiene [ -x /usr/bin/lesspipe.sh ] && export LESSOPEN="|/usr/bin/lesspipe.sh %s"agregado a/etc/profile.d/less.sh
KHobbits
25

Menos no puede leer archivos comprimidos, puede verificarlo en su página de manual. Hay un script, instalado de manera predeterminada en Ubuntu y la mayoría de las distribuciones, llamado zless , que funciona como usted describió.

Entonces la respuesta es usar:

zless my_stuff.csv.gz

La diferencia entre Fedora y Ubuntu es que Fedora establece la variable de entorno LESSOPEN para forzar el argumento a través de lesspipe:

echo $LESSOPEN
||/usr/bin/lesspipe.sh %s

Tenga en cuenta que este comando no funcionará en Ubuntu.

Javier Rivera
fuente
En Ubuntu zlesshay un script de shell que usa lessy lesspipeen su núcleo, por lesslo que no puede ser un enlace simbólico zless. No creo que sea diferente en otras distribuciones.
enzotib
Oh ... me hiciste arrancar mi instalación de Fedora;). Editado
Javier Rivera