«Меньше» не распаковывает автоматически сжатые файлы

55

В Fedora / Redhat / CentOS lessкоманда, похоже, волшебным образом обнаруживает сжатый файл и распаковывает его на лету, так что вы можете сделать:

less my_stuff.csv.gz

Я только что заметил, что это не работает в Ubuntu 11

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

Я проверял свои виртуальные машины CentOS, чтобы увидеть, есть ли какая-то магия псевдонимов оболочки, которая заставляет его работать, но, похоже, его нет. Поддержка gzip только что встроена в бинарный файл CentOS?

Если кто-нибудь знает, как это работает в CentOS и / или как это можно сделать для работы в Ubuntu, я был бы благодарен.

Я знаю, что могу сделать

zcat my_stuff.csv.gz | less

но это заставило бы мою клавиатуру быстрее изнашиваться.

AndrewR
источник
2
На Ubuntu 16.04 less myfile.txt.gzработает "из коробки".
Пабло А

Ответы:

42

lessне делайте этого по умолчанию, но в строке по умолчанию есть строка, ~/.bashrcкоторая меняет поведение по умолчанию:

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

Обязательно не удаляйте и не комментируйте эту строку.
Имея это в виду, вы можете распаковывать файлы в архиве и без архивирования, не зная, как в

less /var/log/dpkg.log*

где некоторые из журналов могут быть заархивированы, а некоторые другие не заархивированы.

Для учетной записи root, к которой sudoвы получили доступ, вы не можете сделать то же самое, но есть два обходных пути:

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

В первом случае я использовал zless, что работает и для неархивированного файла.
Во втором я добавил -Eопцию, чтобы sudoсохранить переменные среды, чтобы сделать меньше работы, как вы ожидаете.

enzotib
источник
1
Разве первая строка в .bashrc не присутствует по умолчанию? Я не помню, чтобы добавить его, и он работает без проблем здесь (10.4).
Johanvdw
2
@johanvdw: да, это так: я сказал, что "по умолчанию есть строка ~/.bashrc". ОП мог бы изменить свой собственный ~/.bashrc.
энзотиб
Просто подумал, что добавлю, что в упомянутой операционной системе rhel, где это работает, вы увидите следующее в env: LESSOPEN=|/usr/bin/lesspipe.sh %sЭто делается с помощью скрипта, содержащего [ -x /usr/bin/lesspipe.sh ] && export LESSOPEN="|/usr/bin/lesspipe.sh %s"добавленный в/etc/profile.d/less.sh
KHobbits
25

Меньше не можете читать сжатые файлы, вы можете проверить это на его странице руководства. Существует скрипт, установленный по умолчанию в Ubuntu и большинстве дистрибутивов, называемый zless , который работает, как вы описали.

Таким образом, ответ заключается в использовании:

zless my_stuff.csv.gz

Разница между Fedora и Ubuntu заключается в том, что Fedora устанавливает переменную среды LESSOPEN, чтобы аргумент передавался через lesspipe:

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

Обратите внимание, что эта команда не будет работать в Ubuntu.

Хавьер Ривера
источник
В Ubuntu zlessесть сценарий оболочки, который использует lessи lesspipeпо своей сути, поэтому lessне может быть символической ссылкой на zless. Я не думаю, что это отличается в других дистрибутивах.
энзотиб
О ... ты заставил меня загрузить мою установку Fedora;). Ред.
Хавьер Ривера