Назад | Перейти на главную страницу

Показывать содержимое tar-файла с помощью 'less' во FreeBSD

Постоянно переключаясь между Linux и FreeBSD, я натыкаюсь на это. Когда я делаю:

 less something.tgz

Системы Linux (ну ... Ubuntu, если быть точным) показывают мне список файлов, чего я обычно и хочу, в то время как FreeBSD показывает двоичное содержимое. Как такое поведение (отображение содержимого файла) достигается в Linux и можно ли воспроизвести его в системах FreeBSD?

Я собираюсь быть здесь капризным стариком, который кричит: «Эй, ребята, слезайте с моей лужайки!» но...

Вы делаете это неправильно.

Все меньше и больше двух распространенных программ пейджера предназначены для запуска в конце строки передаваемых команд. Эти программы не предназначены для чтения файлов произвольного типа, таких как архив cpio или tar-архив, или зашифрованный gzip tarred или зашифрованный bzip2ed файл.

Изучите способ работы с unix, и вы начнете понимать, что происходит, и с множеством других вещей. Таким образом вы узнаете о таких вещах, как stdin, stdout и stderr.

gzip -d <файл | tar -tvf - | Меньше

Вы меня потом поблагодарите.

Вы можете увидеть что-нибудь полезное с zless somefile.tgz но я думаю, что вы действительно хотите сделать следующее:

tar ztvf somefile.tgz |less

который будет работать на всех системах. Обратите внимание, что t просто сообщает вам, что есть в отличие от x, который извлекает файлы.

Взгляните на страницу руководства lesspipe (или lessopen) в коробке с Ubuntu.

В версии Debian / Ubuntu все, что вам нужно сделать, это добавить

eval "$(lesspipe)"

на ваш .bashrc.

Во FreeBSD вы найдете lesspipe.sh скрипт в отдельном порту с именем lesspipe, который использует версию из Sourceforge (однако у него нет удобной настройки, описанной выше - на странице руководства less есть больше информации).

Вот другая версия сценария, который я нашел на свежее мясо: lesspipe, дополнение для браузера less

Это делается с помощью препроцессора lessopen:

michael@challenger:~> echo $LESSOPEN
lessopen.sh %s
michael@challenger:~> which lessopen.sh
/usr/bin/lessopen.sh
michael@challenger:~> less logs.zip
Archive:  ./logs.zip

 Length   Method    Size  Ratio   Date   Time   CRC-32    Name

--------  ------  ------- -----   ----   ----   ------    ----
   17484  Defl:N     2269  87%  03-30-09 22:59  03bf67d6  20090330/Logs-20090330.CSV
...

Удалите переменную среды, и вы увидите, что меньше ведет себя, как в базовой системе:

michael@challenger:~> unset LESSOPEN
michael@challenger:~> less logs.zip
"logs.zip" may be a binary file.  See it anyway? 

Проверьте свою страницу руководства less (1), чтобы узнать, поддерживает ли она LESSOPEN.

Я никогда не видел эту работу на .tgz файлы, только .gz текстовые файлы, но, возможно, это так. Во всяком случае, на многих дистрибутивах Linux less определит, сжат ли файл с помощью gzip, и распакует поток по мере его отображения. Я не могу говорить о FreeBSD, но, по крайней мере, на OpenBSD вам нужно использовать zless вместо этого, если вы просматриваете сжатый текстовый файл. Я полагаю, что он также включен во FreeBSD или, по крайней мере, доступен из дерева портов.