Вопрос Утилита для cat / gunzip список файлов


Есть ли обычно установленная утилита Linux, которая будет принимать список файлов и cat или gzip -d (==zcat) в зависимости от того, сжат ли файл?

Пример того, где я просто нуждался в этом, - это когда я хочу изучить /var/log/messages файлы, в том числе логротатные (/var/log/messages-{date}.gz) и текущий файл.

Я скорее всего добавлю что-то вроде следующего ~/.zshrc:

catz () {
    local file
    for file ; do
        case $file in
            *gz*) gzip -d < $file ;;
            *bz*) bzip -d < $file ;;
            *xz*|*lz*) xz -d < $file ;;
            *) cat $file ;;
        esac
    done
}

Но я не всегда на машине, где у меня установлен мой rc, поэтому я надеялся на более общее решение.


2
2017-11-09 17:18


происхождения




ответы:


less делает это.

less /var/log/messages*

Если вы подключите вывод less к другой программе, less будет вести себя как cat или gunzip -c и не выводит результат.


2
2017-11-09 17:37



В частности, любая программа, указанная в $ LESSPIPE, делает это. Я пробовал эту точную команду раньше, был раздражен тем, что мне нужно было: n '/': p 'через список файлов и написал вопрос. Возвращаясь к этому, я получил то, что на самом деле собираюсь использовать: less /var/log/messages* | less, Благодарю. - benizi


«Более общее решение», которое вы ищете, - это тренировать пальцы, чтобы напечатать zcat -f … вместо того, чтобы пытаться перевернуть назад и вперед между zcat а также cat,

Кстати:

  • zgrep будет выполнять поиск как сжатых, так и несжатых файлов без дополнительного флага.
  • bzcat -f ведет себя как zcat -f - оба будут просто выводить (без распаковки) файлы, которые не находятся в их собственном формате сжатия, вместо того, чтобы понимать, что это другой сжатый формат и суб-forking от правой программы декомпрессии.

1
2018-01-30 17:04