2

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

Пример того, где мне просто нужно было это, когда я хочу просмотреть файлы /var/log/messages , включая и журналированные (/var/log/messages -ndomdate /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 ответа2

2

less делает это.

less /var/log/messages*

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

1

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

Кстати:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .