"Less" não descomprime automaticamente arquivos compactados com gzip

55

No Fedora / Redhat / CentOS, o lesscomando parece detectar magicamente um arquivo compactado em gzip e descompactá-lo rapidamente, para que você possa:

less my_stuff.csv.gz

Acabei de notar que isso não funciona no Ubuntu 11

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

Eu estive examinando minhas VMs do CentOS para ver se há alguma mágica de alias de shell que faz com que funcione, mas parece não haver. O suporte ao gzip está embutido no binário do CentOS?

Se alguém souber como isso funciona no CentOS e / ou como pode ser feito para funcionar no Ubuntu, ficaria grato.

Estou ciente de que posso fazer

zcat my_stuff.csv.gz | less

mas isso faria com que meu teclado se desgastasse mais rapidamente.

AndrewR
fonte
2
No Ubuntu 16.04, less myfile.txt.gzfunciona imediatamente .
Pablo A

Respostas:

42

lessnão faça isso por padrão, mas há uma linha no padrão ~/.bashrcque altera o comportamento padrão:

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

Certifique-se de não remover ou comentar esta linha.
Com isso, você pode paginar arquivos compactados e não compactados sem saber, como em

less /var/log/dpkg.log*

onde alguns dos logs podem ser compactados e outros não compactados.

Para a conta raiz acessada através de sudovocê não pode fazer a mesma coisa, mas existem duas soluções alternativas:

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

No primeiro caso que usei zless, isso também funciona para arquivos não compactados.
No segundo, eu adicionei a -Eopção de sudopreservar suas variáveis ​​de ambiente, para fazer menos trabalho como você esperaria.

enzotib
fonte
11
A primeira linha não está presente no .bashrc por padrão? Não me lembro de adicioná-lo e funciona perfeitamente aqui (10.4).
Johanvdw 23/09/11
2
@ johanvdw: sim, é: eu disse "há uma linha no padrão ~/.bashrc". O OP poderia ter modificado o seu próprio ~/.bashrc.
enzotib 23/09/11
Apenas pensei em acrescentar que, nos sistemas operacionais rhel mencionados onde isso funciona, você verá o seguinte em env: LESSOPEN=|/usr/bin/lesspipe.sh %sIsso é feito por um script que contém [ -x /usr/bin/lesspipe.sh ] && export LESSOPEN="|/usr/bin/lesspipe.sh %s"adicionado ao /etc/profile.d/less.sh
KHobbits
25

Menos não pode ler arquivos compactados com gzip, você pode verificá-lo em sua página de manual. Há um script, instalado por padrão no Ubuntu e na maioria das distros, chamado zless , que funciona como você descreveu.

Portanto, a resposta é usar:

zless my_stuff.csv.gz

A diferença entre o Fedora e o Ubuntu é que o Fedora definiu a variável de ambiente LESSOPEN para forçar o argumento através do lesspipe:

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

Note que este comando não vai funcionar no Ubuntu.

Javier Rivera
fonte
No Ubuntu zlessé um script de shell que usa lesse lesspipeem seu núcleo, portanto, lessnão pode ser um link simbólico para zless. Eu não acho que seja diferente em outras distros.
enzotib 23/09/11
Oh ... você me fez inicializar minha instalação do Fedora;). Editado.
Javier Rivera