"Менше" не автоматично розпаковує файли gzipped


55

У Fedora / Redhat / CentOS lessкоманда, здається, магічно виявляє gzipped файл та розпаковує його на льоту, так що ви можете зробити:

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

але це змусить мою клавіатуру швидше зношуватися.


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*

де деякі журнали можуть бути накопичені, а інші - не блискавками.

Для кореневого облікового запису, доступ до якого sudoви не можете зробити, ви не можете зробити те ж саме, але є два способи вирішення:

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

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


1
Чи не за замовчуванням присутній перший рядок у .bashrc? Я не можу згадати його додавання, і він працює безперебійно (10.4).
johanvdw

2
@johanvdw: так, це так: я сказав: "за замовчуванням є рядок ~/.bashrc". ОП могла змінити свою власну ~/.bashrc.
enzotib

Просто подумав би додати, що в згадуваній ОС 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

Менше не можна читати gzipped файли, ви можете перевірити це на його довідковій сторінці. Є сценарій, встановлений за замовчуванням в Ubuntu та більшості дистрибутивів, званий zless , який працює так, як ви описали.

Отже, відповідь полягає у використанні:

zless my_stuff.csv.gz

Різниця між Fedora та Ubuntu полягає в тому, що Fedora встановлює змінну середовища LESSOPEN для примушування аргументу через меншеpipe:

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

Зауважте, що ця команда не працює в Ubuntu.


У Ubuntu zless- це сценарій оболонки, який використовує lessі lesspipeв своїй основі, тому lessне може бути символьним посиланням на zless. Я не думаю, що в інших дистрибутивах це інакше.
enzotib

Ох ... ти змусив мене завантажувати мою Fedora встановити;). Відредаговано.
Хав'єр Рівера
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.