Al manejar archivos de registro, algunos terminan como archivos comprimidos gracias a logrotateotros y no. Entonces, cuando intentas algo como esto:
$ zcat *
terminas con una línea de comando como zcat xyz.log xyz.log.1 xyz.log.2.gz xyz.log.3.gzy luego con:
gzip: xyz.log: not in gzip format
¿Existe una herramienta que tomará los bytes mágicos, similar a cómo filefunciona, y usará zcato catdependerá del resultado para que pueda canalizar la salida, greppor ejemplo?
NB: Sé que puedo escribirlo, pero estoy preguntando si ya existe una herramienta.
text-processing
cat
gzip
0xC0000022L
fuente
fuente

Pruébalo con
-fo--force:Dado que
zcates solo un script simple que se ejecutacon opciones largas que se traducirían en
y, según el
man gzip(enfatizar el mío):-f --force Fuerce la compresión o descompresión incluso si el archivo tiene múltiples enlaces o el archivo correspondiente ya existe, o si los datos comprimidos son Leído o escrito en una terminal. Si los datos de entrada no están en un formato reconocido por gzip, y si también se da la opción --stdout, copie el datos de entrada sin cambios en la salida estándar: deje que zcat se comporte como cat .También:
Podrías usar
zgreppara eso:aunque vea el comentario de Stéphane a continuación.
fuente
zlesssolución. Agradable y +1.zlessyzgrepson scripts que llamangzip -cdfq(es decirzcat -fq).Yo uso exactamente para el mismo propósito:
fuente
Hay un reemplazo directo para ztools (zcat, zgrep, ..) llamado zutils que une todas las herramientas de descompresión independientemente del backend. Entonces, con el mismo comando, puede leer archivos lzma, gzipped, xz de forma transparente.
Está disponible en debian wheezy o más reciente, probablemente también en redhat / centos.
La página del proyecto está aquí nongnu.org
Una publicación de blog que explica el uso de la utilidad aquí ( noone.org )
fuente
Esto funciona bien en RHEL 5.x donde zcat es un binario. Falla en RHEL 6.x (y Ubuntu 12.x) donde zcat es un script. Esto solía funcionar bien.
No estaría usando zcat en absoluto, pero zgrep tampoco manejará correctamente los archivos sin comprimir.
fuente
Abre tanto comprimido como no comprimido, en orden cronológico.
fuente
ls -rvpara evitartac. Para los archivos de registro,less $(ls -rv syslog*)con suLESSOPENconjunto de variables de entorno funciona correctamente. Puede buscar entre archivosesc-npara encontrar la siguiente coincidencia, ignorando los límites de los archivos.zsh:zcat -f syslog*(nOn)¿Qué hay de la envoltura?
fuente
Copie y pegue (o póngalo al final de su
~/.bashrcarchivo) esta función bash :Ahora puede escribir, por ejemplo,
logs /var/log/syslogologs /var/log/nginx/access.logpara ver todos los mensajes de registro syslog o nginx, desde el más antiguo al más nuevo con menos .Luego puede buscar algo escribiendo
/somethingy presionandonpara el siguiente .fuente
Hay un hermoso script de Perl que hace exactamente esto. Es logresolvemerge.pl del proyecto awstats: http://www.awstats.org/docs/awstats_tools.html
Logresolvemerge le permite obtener un archivo de registro de salida único, ordenado por fecha, creado a partir de fuentes particulares:
La salida está en STDOUT, por lo que puede utilizarla bastante bien en procesos adicionales.
fuente
Sobre la base de la respuesta de @ Ryan, lo siguiente obtendrá todos los archivos 'enrollados' ordenados alfabéticamente, luego obtendrá el archivo actual, descomprímalos, si es necesario, y
lessellos:cat <(ls mylog.log-* | sort) <(ls mylog.log) | xargs zcat -f | lesso si desea obtenerlos todos como una secuencia continua, puede
tailhacerlo y, opcionalmente, canalizarlo a otro procesocat <(ls mylog.log-* | sort | xargs zcat -f) <(tail -f -n +0 mylog.log)Debo señalar que esto está diseñado para registros que se rotan diariamente con la fecha adjunta al final del archivo. Si nos registra un formato diferente, tendrá que modificar la primera parte de la
catdeclaración para acomodarla.fuente