“less” não descomprime automaticamente arquivos gzipados

40

No Fedora / Redhat / CentOS, o comando less parece detectar magicamente um arquivo gzipado e descompactá-lo rapidamente, assim você pode fazer:

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 que não existe. O suporte a gzip foi construído apenas no binário do CentOS?

Se alguém souber como isso funciona no CentOS e / ou como ele pode funcionar no Ubuntu, eu ficaria muito grato.

Estou ciente de que posso fazer

zcat my_stuff.csv.gz | less

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

    
por AndrewR 23.09.2011 / 08:53

2 respostas

34

less não faz isso por padrão, mas há uma linha no padrão ~/.bashrc que altera o comportamento padrão:

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

Não remova ou comente esta linha.
Com isso, você pode enviar arquivos zipados e não zipados sem saber como em

less /var/log/dpkg.log*

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

Para a conta raiz acessada por sudo , você não pode fazer a mesma coisa, mas há duas soluções alternativas:

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

No primeiro caso, usei zless , que funciona também para arquivos não zipados.
Na segunda, adicionei a opção -E a sudo para preservar suas variáveis de ambiente, para fazer menos trabalho como seria de esperar.

    
por enzotib 23.09.2011 / 09:29
19

Menos não pode ler arquivos gzipados, você pode verificá-los em sua página man. Existe um script, instalado por padrão no Ubuntu e na maioria das distros, chamado zless , que funciona como você descreveu.

Então 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 irá funcionar no Ubuntu.

    
por Javier Rivera 23.09.2011 / 09:15

Tags