„Mniej” nie automatycznie dekompresuje spakowane pliki

55

W Fedorze / Redhat / CentOS lesspolecenie wydaje się w magiczny sposób wykrywać skompresowany plik i rozpakowywać go w locie, dzięki czemu możesz:

less my_stuff.csv.gz

Właśnie zauważyłem, że to nie działa na Ubuntu 11

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

Sprawdzałem moje maszyny wirtualne CentOS, aby sprawdzić, czy jest jakiś magiczny alias powłoki, który sprawia, że ​​działa, ale wydaje się, że nie. Czy obsługa gzip jest właśnie wbudowana w plik binarny CentOS?

Jeśli ktoś wie, jak to działa na CentOS i / lub jak można go uruchomić na Ubuntu, byłbym wdzięczny.

Wiem, że mogę to zrobić

zcat my_stuff.csv.gz | less

ale to spowodowałoby szybsze zużycie mojej klawiatury.

AndrewR
źródło
2
W systemie Ubuntu 16.04 less myfile.txt.gzdziała natychmiast po wyjęciu z pudełka.
Pablo A,

Odpowiedzi:

42

lessnie rób tego domyślnie, ale domyślnie jest linia, ~/.bashrcktóra zmienia domyślne zachowanie:

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

Pamiętaj, aby nie usuwać ani komentować tego wiersza.
Dzięki temu możesz spakować i spakować pliki bez wiedzy, na przykład w

less /var/log/dpkg.log*

gdzie niektóre dzienniki można spakować, a inne nie spakować.

W przypadku konta root, do sudoktórego można uzyskać dostęp , nie można zrobić tego samego, ale istnieją dwa obejścia:

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

W pierwszym przypadku, którego użyłem zless, działa to również w przypadku pliku nieskompresowanego.
W drugim dodałem -Eopcję sudozachowania zmiennych środowiskowych, aby mniej pracować, jak można się spodziewać.

enzotib
źródło
1
Czy pierwsza linia nie jest domyślnie w .bashrc? Nie pamiętam, aby go dodać i działa tutaj płynnie (10.4).
johanvdw
2
@ johanvdw: tak to jest: Powiedziałem „domyślnie jest linia ~/.bashrc”. OP mógł zmodyfikować swój własny ~/.bashrc.
enzotib
Pomyślałem, że mogę dodać, że na RHEL OS wspominał gdzie to działa, można zobaczyć następujące w env: LESSOPEN=|/usr/bin/lesspipe.sh %sOdbywa się to przez skrypt zawierający [ -x /usr/bin/lesspipe.sh ] && export LESSOPEN="|/usr/bin/lesspipe.sh %s"dodany do/etc/profile.d/less.sh
KHobbits
25

Mniej nie może odczytać spakowanych plików, możesz to sprawdzić na stronie man. Istnieje skrypt instalowany domyślnie w Ubuntu i większości dystrybucji, zwany zless , który działa zgodnie z opisem.

Więc odpowiedzią jest użycie:

zless my_stuff.csv.gz

Różnica między Fedorą a Ubuntu polega na tym, że Fedora ustawiła zmienną środowiskową LESSOPEN w celu wymuszenia argumentu przez lesspipe:

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

Zauważ, że to polecenie nie działa w Ubuntu.

Javier Rivera
źródło
Na Ubuntu zlessjest skrypt powłoki, który używa lessi jest lesspipew jego rdzeniu, więc lessnie może być dowiązaniem symbolicznym zless. Nie sądzę, żeby było inaczej w innych dystrybucjach.
enzotib
Och ... zmusiłeś mnie do uruchomienia mojej instalacji Fedory;). Edytowane.
Javier Rivera,