Hier, j’avais besoin de faire une recherche dans les logs de mon serveur linux. Or, ceux-ci sont automatiquement compressés tous les jours par gzip. On se retrouve donc avec des fichiers .gz journaliers. Grep n’est pas capable d’en extraire du texte bien sûr.
La solution est de décompresser le fichier vers la sortie standard (stdout) et de faire le grep dessus. Par exemple:
gunzip -c *.gz | grep
tar xzfO *.tar.gz | grep
tar xfO *.tar | grep
Pour la première ligne (gunzip -c *.gz | grep ), il y a aussi: zgrep,
par contre, je n’ai pas trouvé de ztargrep…
zgrep – search possibly compressed files for a regular expression
SYNOPSIS
zgrep [ grep_options ] [ -e ] pattern filename…
DESCRIPTION
Zgrep invokes grep on compressed or gzipped files. All options speci-
fied are passed directly to grep. If no file is specified, then the
standard input is decompressed if necessary and fed to grep. Otherwise
the given files are uncompressed if necessary and fed to grep.
If the GREP environment variable is set, zgrep uses it as the grep pro-
gram to be invoked.
Tant qu’à parler de gzip, une fonction déroutante, est que le format gzip contient un champ pour la date de modification du fichier compressé (ou date de compression).
Ce qui fait que si on 2 fichiers (non compressés) au contenu identique fichier1.txt dans fichier2.txt,
cmp renvoit que les fichiers sont identiques (ouf).
cmp fichier1.txt fichier2.txt
echo $?
0
Mais, si on les compressent avec gzip (pas en même temps), on aura deux fichiers compressés différents
cmp fichier1.txt.gz fichier2.txt.gz
fichier1.txt.gz fichier2.txt.gz differ: byte 5, line 1
echo $?
1
Heureusement, on peut alors utiliser zcmp pour comparer les contenus
zcmp test_gzip.txt.gz test_gzip2.txt.gz
echo $?
0
http://tools.ietf.org/html/rfc1952
MTIME (Modification TIME)
This gives the most recent modification time of the original
file being compressed. The time is in Unix format, i.e.,
seconds since 00:00:00 GMT, Jan. 1, 1970. (Note that this
may cause problems for MS-DOS and other systems that use
local rather than Universal time.) If the compressed data
did not come from a file, MTIME is set to the time at which
compression started. MTIME = 0 means no time stamp is
available.