“Less” tidak secara otomatis mendekompresi file yang di-gzip

55

Pada Fedora / Redhat / CentOS, lessperintah ini tampaknya mendeteksi secara ajaib file yang di-gzip dan mendekompresnya dengan cepat, sehingga Anda dapat melakukannya:

less my_stuff.csv.gz

Saya baru saja memperhatikan bahwa ini tidak berfungsi di Ubuntu 11

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

Saya telah memeriksa CentOS VMs saya untuk melihat apakah ada beberapa shell alias sulap yang membuatnya berfungsi tetapi sepertinya tidak ada. Apakah dukungan gzip hanya dibangun di dalam biner CentOS?

Jika ada yang tahu bagaimana ini bekerja pada CentOS dan / atau bagaimana ini dapat bekerja pada Ubuntu saya akan berterima kasih.

Saya sadar saya bisa melakukannya

zcat my_stuff.csv.gz | less

tapi itu akan membuat keyboard saya cepat aus.

AndrewR
sumber
2
Di Ubuntu 16,04 less myfile.txt.gzbekerja di luar kotak.
Pablo A

Jawaban:

42

lessjangan lakukan itu secara default, tetapi ada garis di default ~/.bashrcyang mengubah perilaku default:

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

Pastikan untuk tidak menghapus atau mengomentari baris ini.
Dengan ini di tempat, Anda dapat halaman file zip dan non-zip tanpa diketahui, seperti di

less /var/log/dpkg.log*

di mana beberapa log dapat di-zip dan beberapa lainnya tidak di-zip.

Untuk akun root yang diakses melalui sudoAnda tidak dapat melakukan hal yang sama, tetapi ada dua solusi:

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

Dalam kasus pertama yang saya gunakan zless, itu berfungsi juga untuk file yang tidak di-zip.
Dalam yang kedua saya menambahkan -Eopsi sudountuk melestarikan variabel lingkungan Anda, untuk membuat lebih sedikit pekerjaan seperti yang Anda harapkan.

enzotib
sumber
1
Bukankah baris pertama ada di .bashrc secara default? Saya tidak ingat menambahkannya dan bekerja dengan lancar di sini (10.4).
johanvdw
2
@ johanvdw: ya itu: saya katakan "ada garis di default ~/.bashrc". OP bisa memodifikasi sendiri ~/.bashrc.
enzotib
Saya pikir saya akan menambahkan, bahwa pada rhel OS yang disebutkan di mana ini berfungsi, Anda akan melihat yang berikut ini dalam env: LESSOPEN=|/usr/bin/lesspipe.sh %sIni dilakukan oleh sebuah skrip yang berisi [ -x /usr/bin/lesspipe.sh ] && export LESSOPEN="|/usr/bin/lesspipe.sh %s"ditambahkan ke/etc/profile.d/less.sh
KHobbits
25

Kurang bisa membaca file gzip, Anda bisa memeriksanya di halaman manualnya. Ada skrip, diinstal secara default di Ubuntu dan sebagian besar distro, disebut zless , yang berfungsi seperti yang Anda jelaskan.

Jadi jawabannya adalah menggunakan:

zless my_stuff.csv.gz

Perbedaan antara Fedora dan Ubuntu adalah bahwa Fedora mengatur variabel lingkungan LESSOPEN untuk memaksa argumen melalui lesspipe:

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

Perhatikan bahwa perintah ini tidak akan berfungsi di Ubuntu.

Javier Rivera
sumber
Di Ubuntu zlessadalah skrip shell yang menggunakan lessdan lesspipepada intinya, jadi lesstidak bisa menjadi symlink ke zless. Saya tidak berpikir itu berbeda di distro lain.
enzotib
Oh ... Anda membuat saya mem-boot instalasi Fedora saya;). Diedit.
Javier Rivera