"Less" dekomprimiert gezippte Dateien nicht automatisch

55

Unter Fedora / Redhat / CentOS lessscheint der Befehl eine gezippte Datei auf magische Weise zu erkennen und sie sofort zu dekomprimieren.

less my_stuff.csv.gz

Ich habe gerade bemerkt, dass dies unter Ubuntu 11 nicht funktioniert

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

Ich habe meine CentOS-VMs untersucht, um festzustellen, ob es eine Shell-Alias-Magie gibt, die funktioniert, aber es scheint keine zu geben. Ist die gzip-Unterstützung nur in die CentOS-Binärdatei integriert?

Wenn jemand weiß, wie das unter CentOS funktioniert und / oder wie es unter Ubuntu funktioniert, wäre ich dankbar.

Mir ist bewusst, dass ich das kann

zcat my_stuff.csv.gz | less

Aber dadurch würde sich meine Tastatur schneller abnutzen.

AndrewR
quelle
2
Unter Ubuntu 16.04 less myfile.txt.gzfunktioniert es sofort.
Pablo A

Antworten:

42

lessTun Sie das nicht standardmäßig, aber es gibt eine Zeile in der Standardeinstellung ~/.bashrc, die das Standardverhalten ändert:

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

Achten Sie darauf, diese Zeile nicht zu entfernen oder zu kommentieren.
Mit dieser Option können Sie gezippte und nicht gezippte Dateien wie in blättern, ohne es zu wissen

less /var/log/dpkg.log*

Hier können einige der Protokolle komprimiert und andere nicht komprimiert werden.

Für das Root-Konto, auf das über zugegriffen wird sudo, können Sie nicht dasselbe tun, es gibt jedoch zwei Problemumgehungen:

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

Im ersten Fall habe ich verwendet zless, das funktioniert auch für nicht gezippte Dateien.
In der zweiten habe ich die -EOption hinzugefügt sudo, Ihre Umgebungsvariablen beizubehalten, um weniger Arbeit zu machen, als Sie erwarten würden.

Enzotib
quelle
1
Ist die erste Zeile nicht standardmäßig in .bashrc vorhanden? Ich kann mich nicht erinnern, es hinzugefügt zu haben und es funktioniert hier nahtlos (10.4).
Johanvdw
2
@johanvdw: ja es ist: ich sagte "es gibt eine zeile in der voreinstellung ~/.bashrc". Das OP hätte sein eigenes modifizieren können ~/.bashrc.
Enzotib
Ich dachte nur, ich füge hinzu, dass auf den Rhel-Betriebssystemen, auf denen dies funktioniert, Folgendes in env zu sehen ist: LESSOPEN=|/usr/bin/lesspipe.sh %sDies geschieht durch ein Skript, das [ -x /usr/bin/lesspipe.sh ] && export LESSOPEN="|/usr/bin/lesspipe.sh %s"hinzugefügt zu/etc/profile.d/less.sh
KHobbits
25

Weniger können keine gezippten Dateien lesen, Sie können dies auf der Manpage überprüfen. Es gibt ein Skript namens zless , das standardmäßig in Ubuntu und den meisten Distributionen installiert ist und so funktioniert, wie Sie es beschrieben haben.

Die Antwort lautet also:

zless my_stuff.csv.gz

Der Unterschied zwischen Fedora und Ubuntu besteht darin, dass Fedora die Umgebungsvariable LESSOPEN gesetzt hat , um das Argument durch lesspipe zu erzwingen:

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

Beachten Sie, dass dieser Befehl in Ubuntu nicht funktioniert.

Javier Rivera
quelle
Unter Ubuntu zlessgibt es ein Shell-Skript, das lessund lesspipein seinem Kern verwendet, also lesskeinen Symlink zu zless. Ich denke nicht, dass es in anderen Distributionen anders ist.
Enzotib
Oh ... du hast mich dazu gebracht, meine Fedora-Installation zu starten;). Bearbeitet
Javier Rivera