Я в настоящее время использую эту версию решения № 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
zless
Это кажется жалостью о zcat
, поскольку libz имеет API, который поддерживает чтение и из сжатых и из несжатых файлов прозрачно. Но в странице справочника действительно говорится это zcat
эквивалентно gunzip -c
.
Попробуйте его -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 ниже.
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 правильно не обработает несжатые файлы также.
Существует общедоступная замена для табуретов (zcat, zgrep..) названный zutils, который объединяет все инструменты распаковки независимо от бэкенда. Таким образом с той же командой можно считать плоскость, lzma, gzipped, xz файлы прозрачно.
Это доступно в debian, хрипящем или более новом, вероятно, в redhat/centos также.
Страницей проекта является здесь nongnu.org
Сообщение в блоге, объясняющее использование util здесь (noone.org)
Что относительно обертки?
$ 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
открывается как сжатые, так и не сжатые, в хронологическом порядке.
ls -v syslog* | tac | xargs zcat -f | less
Скопируйте и вставьте (или поместите в конец файла ~ / .bashrc
) эту функцию bash :
logs() { zcat -f $(ls -rv "$1"*) | less; }
Теперь вы можете ввести, например, журналы / var / log / syslog
или logs /var/log/nginx/access.log
для просмотра всех системного журнала или nginx записывать сообщения от самого старого к самому новому с меньше .
Затем вы можете выполнить поиск что-то , набрав / something
и нажав n
, чтобы ввести следующий .
Точно для тех же целей использую:
{ cat /var/log/messages ; zcat /var/log/messages*.gz ; }| grep something | grep "something else" ....
Для этого есть прекрасный perl-скрипт. Это logresolvemerge.pl из проекта awstats: http://www.awstats.org/docs/awstats_tools.html
Logresolvemerge позволяет получить один уникальный выходной файл журнала, отсортированный по дате, созданный из определенных источников:
Вывод находится в STDOUT, так что вы можете использовать его в дополнительных процессах.
Основываясь на ответе @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
, чтобы приспособиться к нему.