“Less” ne décompresse pas automatiquement les fichiers gzippés

55

Sous Fedora / Redhat / CentOS, la lesscommande semble détecter comme par magie un fichier compressé et le décompresser à la volée. Vous pouvez ainsi:

less my_stuff.csv.gz

Je viens de remarquer que cela ne fonctionne pas sur Ubuntu 11

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

J'ai examiné mes machines virtuelles CentOS pour voir s'il existe un alias de shell shell qui le rend efficace, mais cela ne semble pas être le cas. Le support gzip est-il uniquement intégré au binaire CentOS?

Si quelqu'un sait comment cela fonctionne sur CentOS et / ou comment il peut fonctionner pour Ubuntu, je vous en serais reconnaissant.

Je suis conscient que je peux faire

zcat my_stuff.csv.gz | less

mais cela ferait que mon clavier s'use plus rapidement.

AndrewR
la source
2
Sur Ubuntu 16.04 less myfile.txt.gzfonctionne immédiatement .
Pablo Un

Réponses:

42

lessne le faites pas par défaut, mais il existe une ligne dans la valeur par défaut ~/.bashrcqui modifie le comportement par défaut:

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

Veillez à ne pas supprimer ou commenter cette ligne.
Avec ceci en place, vous pouvez rechercher des fichiers compressés et non compressés sans le savoir, comme dans

less /var/log/dpkg.log*

où certains journaux peuvent être compressés et d'autres non.

Pour le compte root auquel sudovous avez accédé, vous ne pouvez pas faire la même chose, mais il existe deux solutions de contournement:

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

Dans le premier cas que j'ai utilisé zless, cela fonctionne aussi pour les fichiers non compressés.
Dans le second, j’ai ajouté l’ -Eoption permettant sudode préserver vos variables d’environnement, afin de vous permettre de travailler moins que prévu.

enzotib
la source
1
La première ligne n'est-elle pas présente dans .bashrc par défaut? Je ne me souviens pas de l'avoir ajouté et cela fonctionne parfaitement ici (10.4).
johanvdw
2
@johanvdw: oui, c'est vrai: j'ai dit "il y a une ligne dans la valeur par défaut ~/.bashrc". Le PO aurait pu modifier le sien ~/.bashrc.
enzotib
Je pensais juste que j'ajouterais que, sur l'OS rhel mentionné où cela fonctionne, vous verrez ce qui suit dans env: LESSOPEN=|/usr/bin/lesspipe.sh %sCeci est effectué par un script contenant [ -x /usr/bin/lesspipe.sh ] && export LESSOPEN="|/usr/bin/lesspipe.sh %s"ajouté à/etc/profile.d/less.sh
KHobbits
25

Moins ne peut pas lire les fichiers gzippés, vous pouvez le vérifier dans sa page de manuel. Il existe un script, installé par défaut dans Ubuntu et la plupart des distributions, appelées zless , qui fonctionnent comme vous l'avez décrit.

Donc, la réponse est d'utiliser:

zless my_stuff.csv.gz

La différence entre Fedora et Ubuntu réside dans le fait que Fedora a défini la variable d’environnement LESSOPEN pour forcer l’argument via lesspipe:

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

Notez que cette commande ne fonctionnera pas dans Ubuntu.

Javier Rivera
la source
Sur Ubuntu zlessest un script shell qui utilise lesset lesspipedans son noyau, donc lessne peut pas être un lien symbolique vers zless. Je ne pense pas que ce soit différent dans d'autres distributions.
enzotib
Oh ... tu m'as fait démarrer mon installation de Fedora;). Édité.
Javier Rivera