Существует ли инструмент, который комбинирует zcat и кошку прозрачно?

Я в настоящее время использую эту версию решения № 1

# save path on cd
function cd {
    builtin cd $@
    pwd > ~/.last_dir
}

# restore last saved path
if [ -f ~/.last_dir ]
    then cd `cat ~/.last_dir`
fi

в моем .zshrc

73
22.04.2015, 22:49
10 ответов

zless

Это кажется жалостью о zcat, поскольку libz имеет API, который поддерживает чтение и из сжатых и из несжатых файлов прозрачно. Но в странице справочника действительно говорится это zcat эквивалентно gunzip -c.

41
27.01.2020, 19:31
  • 1
    Спасибо за эту альтернативу. Я, возможно, думал об этом, мог я нет? ;)... о, хорошо. Пятно на, +1 и принимает (также, потому что у Вас есть меньше представителя, чем другая отвечающая сторона). –  0xC0000022L 27.05.2013, 23:10

Попробуйте его -f или --force:

zcat -f -- *

С тех пор zcat просто простой сценарий, который работает

exec gzip -cd "$@"

с долгими опциями, которые перевели бы в

exec gzip --stdout --decompress "$@"

и, согласно man gzip (подчеркните мой):

-f --force
      Force compression or decompression even if the file has multiple links
      or the corresponding file already exists, or if the compressed data is
      read from or written to a terminal. If the input data is not in a format
      recognized by gzip, and if the option --stdout is also given, copy the
      input data without change to the standard output: let zcat behave as cat.

Также:

так, чтобы я мог передать вывод по каналу к grep например,

Вы могли использовать zgrep для этого:

zgrep -- PATTERN *

хотя см. комментарий Stéphane ниже.

102
27.01.2020, 19:31
  • 1
    Спасибо, это - интересная альтернатива zless решение. Хороший и +1. –  0xC0000022L 27.05.2013, 23:08
  • 2
    Отметьте это оба zless и zgrep сценарии, которые действительно звонят gzip -cdfq (который является zcat -fq). –  Stéphane Chazelas 28.05.2013, 15:50

Это хорошо работает в RHEL 5.x, где zcat является двоичным файлом. Это перестало работать в RHEL 6.x (и Ubuntu 12.x), где zcat является сценарием. Это раньше хорошо работало.

Я не использовал бы zcat вообще, но zgrep правильно не обработает несжатые файлы также.

3
27.01.2020, 19:31

Существует общедоступная замена для табуретов (zcat, zgrep..) названный zutils, который объединяет все инструменты распаковки независимо от бэкенда. Таким образом с той же командой можно считать плоскость, lzma, gzipped, xz файлы прозрачно.

Это доступно в debian, хрипящем или более новом, вероятно, в redhat/centos также.

Страницей проекта является здесь nongnu.org

Сообщение в блоге, объясняющее использование util здесь (noone.org)

7
27.01.2020, 19:31

Что относительно обертки?

$ cat xcat.sh 
#!/bin/bash

for i in $@;do 
        [ ! -z "$(file -i $i | grep "gzip")" ] && zcat $i || cat $i
done

$ bash xcat.sh plain.txt gzipped_text.gz
1
27.01.2020, 19:31

открывается как сжатые, так и не сжатые, в хронологическом порядке.

ls -v syslog* | tac | xargs zcat -f | less
2
27.01.2020, 19:31

Скопируйте и вставьте (или поместите в конец файла ~ / .bashrc ) эту функцию bash :

logs() { zcat -f $(ls -rv "$1"*) | less; }

Теперь вы можете ввести, например, журналы / var / log / syslog или logs /var/log/nginx/access.log для просмотра всех системного журнала или nginx записывать сообщения от самого старого к самому новому с меньше .

Затем вы можете выполнить поиск что-то , набрав / something и нажав n , чтобы ввести следующий .

0
27.01.2020, 19:31

Точно для тех же целей использую:

{ cat /var/log/messages ; zcat /var/log/messages*.gz ; }| grep something | grep "something else" ....
13
27.01.2020, 19:31

Для этого есть прекрасный perl-скрипт. Это logresolvemerge.pl из проекта awstats: http://www.awstats.org/docs/awstats_tools.html

Logresolvemerge позволяет получить один уникальный выходной файл журнала, отсортированный по дате, созданный из определенных источников:

  • Он может читать несколько входных файлов журнала.
  • Он может читать файлы журнала .gz/.bz2.
  • Вывод находится в STDOUT, так что вы можете использовать его в дополнительных процессах.

    -1
    27.01.2020, 19:31

    Основываясь на ответе @Ryan, следующее позволит получить все «свернутые» файлы, отсортированные по алфавиту, затем получить текущий файл, распаковать их, если необходимо, и lessих:

    cat <(ls mylog.log-* | sort) <(ls mylog.log) | xargs zcat -f | less

    или, если вы хотите получить их все как непрерывный поток, вы можете tailих и, при желании, передать другому процессу

    cat <(ls mylog.log-* | sort | xargs zcat -f) <(tail -f -n +0 mylog.log)

    Я должен отметить, что это предназначено для журналов, которые ежедневно ротируются с датой, добавленной в конец файла. Если ваши журналы используют другой формат, вам придется изменить первую часть оператора cat, чтобы приспособиться к нему.

    1
    27.01.2020, 19:31

    Теги

    Похожие вопросы