Recherche dans fichier zip

Demande d'aide : c'est ici.
Répondre
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 6242
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors-ligne

Bonjour,
j'ai récupéré une ancienne sauvegarde composée de 30 fichiers .zip.
Est ce que vous connaissez une commande unix permettant de lancer une recherche de contenu à l'intérieur d'un fichier zip ?
Je n'ai pas enviie de faire une recherche manuelle dans tous ces fichiers!
MicP
Modérateur
Modérateur
Messages : 908
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Bonjour

Il y a zgrep
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 6242
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors-ligne

Merci. Zgrep décompresse puis recherche.
Du coup, quitte à décompresser, j'ai fait un:
for f in *.zip; do echo "$f: "; unzip -l "$f" | grep -i '<texte>'; done
MicP
Modérateur
Modérateur
Messages : 908
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Je pensais qu'il s'agissait de 30 fichiers qui avaient été compressés séparément (<=> chaque fichier zip ne contenant qu'un seul fichier),
je n'avais pas pensé aux fichiers archive compressés (qui peuvent contenir plusieurs fichiers ou/et une arborescence de plusieurs fichiers).

J'aurais dû demander plus de précision avant de poster mon message.
Désolé. :blush:
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 6242
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors-ligne

Ca m'a permis de me remettre en tête la commande zgrep :)
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 6242
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors-ligne

Ma commande recherche des fichiers d'un certain nom. Je vais regarder pour aller fouiller dans le contenu des fichiers et identifier une chaine, peut étre avec zcat
MicP
Modérateur
Modérateur
Messages : 908
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Bonjour

C'est difficile de pouvoir proposer une solution qui fonctionnerait avec tous les types de fichiers et tous les différents formats de fichiers existants, etc.

Il faudrait pouvoir définir un peu le contexte pour éviter d'avoir à faire une "usine à gaz" inutile qui tenterait de prendre en compte tout ce qui pourrait exister alors qu'il n'y a peut-être qu'un seul type de fichier, d'un seul format, (en fonction de l'application qui les a créés, mac, msdos, windows, unix, unicode, ascii, etc.) sur lequel tu voudrais effectuer cette recherche.

Pourais-tu nous donner :
- la liste des noms de tes 30 fichiers zip,
- la liste des fichiers contenus dans un de ces fichiers (avec leur éventuel chemin dans l'arborescence)
- un exemple du contenu de ces fichiers
- un exemple du motif de recherche que tu voudrais trouver dans ces fichiers
- un exemple du retour de cette recherche en fonction de ce que tu voudrais en faire
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 6242
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : Hors-ligne

Ce sont des fichiers zip issus de la sauvegarde d'un disque d'un ordi windows (toute l'arbo). L'archiveur a crée une trentaine de fichiers zip (ça datte de plusieurs années). Chaque fichier zip fait entre 3 et 4GO. C'est pour ça que je ne veux pas tout dezipper pour faire une recherche classique. Je cherche les fichiers qui contiennent une chaine de caracteres particuliére(dans le corps ou le titre)
MicP
Modérateur
Modérateur
Messages : 908
Inscription : 16 avr. 2016, 22:14
Status : Hors-ligne

Ok, alors on aura à faire à une arborescence de fichiers et tout un tas de type de fichiers différents.

Du coup, la recherche dans les fichiers ne pourra peut-être se faire qu'avec grep et il faudra éviter les exécutables et librairies dll, etc.
et puis il y a le caractère de fin de ligne dans les fichiers texte brut de windows qui n'est pas le même que sur un système unix.

Il faudrait cibler les noms des répertoires suceptibles ou pas de contenir les fichiers sur lesquels la recherche doit être faite,
ensuite les noms des fichiers à éviter (en fonction de leur nom d'extension ou/et des caractères contenus etc.)

Je propose, dans une boucle listant chacun des fichiers archive
- extraire la liste des fichiers contenus dans l'archive zip (en listant son contenu)
- ne traiter que les répertoires suceptibles de contenir les fichiers texte (en fonction d'une liste de répertoires à exclure)
- et ensuite extraire de la liste les noms des chemins des fichiers suceptibles de contenir le motif recherché (en fonction d'une liste des types de fichiers à exclure)
- pour enfin chercher le motif dans le contenu des fichiers non exclus.

Est-ce que le motif à rechercher est dans un fichier texte brut (peut-être un fichier dont le nom d'extension est "txt") ?
Répondre