"Less" non decomprime automaticamente i file compressi con gzip


55

Su Fedora / Redhat / CentOS il lesscomando sembra rilevare magicamente un file gzip e decomprimerlo al volo, quindi puoi fare:

less my_stuff.csv.gz

Ho appena notato che questo non funziona su Ubuntu 11

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

Ho esaminato le mie VM CentOS per vedere se c'è qualche magia alias di shell che la fa funzionare ma sembra che non ci sia. Il supporto per gzip è appena integrato nel binario CentOS?

Se qualcuno sa come funziona su CentOS e / o come può funzionare su Ubuntu, sarei grato.

Sono consapevole di poterlo fare

zcat my_stuff.csv.gz | less

ma ciò renderebbe la mia tastiera consumarsi più rapidamente.


2
Su Ubuntu 16.04 less myfile.txt.gzfunziona immediatamente .
Pablo A

Risposte:


42

lessnon farlo per impostazione predefinita, ma è presente una riga per impostazione predefinita ~/.bashrcche modifica il comportamento predefinito:

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

Assicurati di non rimuovere o commentare questa riga.
Con questo in atto, puoi sfogliare i file compressi e non compressi senza saperlo, come in

less /var/log/dpkg.log*

dove alcuni dei registri possono essere compressi e altri non compressi.

Per l'account root a cui si accede sudonon è possibile fare la stessa cosa, ma esistono due soluzioni alternative:

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

Nel primo caso che ho usato zless, funziona anche con file non compressi.
Nella seconda ho aggiunto l' -Eopzione per sudopreservare le variabili di ambiente, per fare meno lavoro come ci si aspetterebbe.


1
La prima riga non è presente in .bashrc per impostazione predefinita? Non ricordo di averlo aggiunto e funziona perfettamente qui (10.4).
johanvdw,

2
@johanvdw: sì, è: ho detto "c'è una riga nell'impostazione predefinita ~/.bashrc". L'OP avrebbe potuto essere modificato da solo ~/.bashrc.
enzotib,

Ho pensato di aggiungere che sul sistema operativo rhel menzionato dove funziona, vedrai quanto segue in env: LESSOPEN=|/usr/bin/lesspipe.sh %sQuesto è fatto da uno script contenente [ -x /usr/bin/lesspipe.sh ] && export LESSOPEN="|/usr/bin/lesspipe.sh %s"aggiunto a/etc/profile.d/less.sh
KHobbits

25

Meno non è in grado di leggere i file compressi con gzip, puoi controllarlo nella sua pagina man. C'è uno script, installato di default in Ubuntu e nella maggior parte delle distro, chiamato zless , che funziona come descritto.

Quindi la risposta è usare:

zless my_stuff.csv.gz

La differenza tra Fedora e Ubuntu è che Fedora imposta la variabile d'ambiente LESSOPEN per forzare l'argomento tramite lesspipe:

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

Nota che questo comando non funzionerà in Ubuntu.


Su Ubuntu zlessè uno script di shell che utilizza lesse lesspipenel suo nucleo, quindi lessnon può essere un collegamento simbolico a zless. Non penso che sia diverso in altre distro.
enzotib,

Oh ... mi hai fatto avviare la mia installazione di Fedora;). Modificato.
Javier Rivera,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.