Je travaille sur SunOS 5.10. J'ai un dossier qui contient environ 200 fichiers zip. Chaque fichier zip contient un seul fichier texte. Je voudrais rechercher une chaîne spécifique dans tous les fichiers texte de tous les fichiers zip.
J'ai essayé ceci (qui recherche n'importe quel fichier texte dans le fichier zip contenant la chaîne "ORA-") mais cela n'a pas fonctionné.
zipgrep ORA-1680 *.zip
Quelle est la bonne chose à faire sans décompresser les fichiers zip?
Réponses:
Il n'est généralement pas possible de rechercher du contenu dans un fichier compressé sans le décompresser d'une manière ou d'une autre. Comme zipgrep n'est qu'un shellscript, enveloppant unzip et egrep lui-même, vous pourriez tout aussi bien le faire manuellement:
Si vous avez juste besoin de la liste des fichiers zip correspondants, vous pouvez utiliser quelque chose comme:
De cette façon, vous décompressez uniquement vers la sortie standard (c'est-à-dire vers la mémoire) au lieu de décompresser les fichiers sur le disque. Vous pouvez bien sûr essayer de simplement
grep -a
les fichiers zip, mais selon le contenu du fichier et votre modèle, vous pouvez obtenir des faux positifs et / ou des faux négatifs.la source
unzip -c
décompresse le fichier vers stdout. Il n'écrit pas l'intégralité du fichier non compressé ailleurs.unzip
usages-p
du streaming sur pipe!zipgrep
prend un seul fichier. Pour le faire fonctionner sur plusieurs fichiers, mettez-le en boucle:la source
for i in *.zip; do zipgrep TextToSearch $i && echo $i; done
Le système de fichiers AVFS présente une vue du système de fichiers où chaque fichier d'archive
/path/to/foo.zip
est accessible en tant que répertoire~/.avfs/path/to/foo.zip#
. Il s'agit d'un système de fichiers FUSE , que vous pouvez installer sur Solaris. AVFS fournit un accès en lecture seule aux formats de fichiers d'archives les plus courants.la source