"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.


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.


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.