IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Rechercher un nom ou une série de chiffres dans une multitude de fichiers zippés


Sujet :

Shell et commandes GNU

  1. #1
    Invité
    Invité(e)
    Par défaut Rechercher un nom ou une série de chiffres dans une multitude de fichiers zippés
    Bonjour

    Je suis dans un répertoire de fichier avec des dizaines de fichiers zippés. à l’intérieur se trouve un nomavecdeschiffre que je veux retrouver.

    J'essaie la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -Ri nomavecchiffre *
    --> ca ne donne rien et je sais que cette valeur ci trouve

    Quelqu'un à une suggestion svp?
    Dernière modification par al1_24 ; 06/07/2015 à 14h01. Motif: Balises CODE

  2. #2
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,

    man unzip pour commencer ?

    Sinon du fait que ton fichier est très probablement compressé, c'est complètement logique qu'un grep textuel ne trouve pas ton texte (vu que l'algo de compression l'a compressé )
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 539
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    Bonjour,

    il existe une commande zgrep...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    @N_BaH: zgrep ne s'applique que pour les fichiers compressés avec gzip (d'après le man chez moi)

    Je pense (vu la formulation de la question) que le propos est d'examiner des archives ZIP pour rechercher un fichier contenu dedans, et qu'il ne s'agit pas de bêtes fichiers compressés avec gzip. (d'ailleurs zgrep ne résout que partiellement le problème si on a un .tar.gz, on identifie bien l'archive "coupable" mais on est incapable de dire quel fichier contenu dans le .tar contient ce qu'on cherche )
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 539
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    "vu la formulation de la question" («Je suis dans un répertoire [...] avec des [...] fichiers zippés.»), on ne peut présumer de rien.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Bonjour,

    Sinon, pour la recherche de nom de fichier dans des fichiers zip, une commande de ce type devrait le faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -name '*.zip' -exec sh -c "zipinfo -1 {} | grep --label={} -H nomavecchiffre"  \;
    Et si on veut rechercher un pattern qui se trouve dans un fichier qui est dans une archive zip:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    zipgrep pattern archive.zip [fichier_dans_le_zip]
    Cordialement.

  7. #7
    Invité
    Invité(e)
    Par défaut commande linux
    j'arrive,

    voici par exemple l'arborescence:

    [tek@XVB2:/partage/ZIP]$ls
    1_nom_du_fichier.tar.gz
    2_nom_du_fichier.tar.gz
    3_nom_du_fichier.tar.gz
    etc..

    à l'intérieur de ces zips, des logs, y en des tonnes

    et à l'intérieur de ces logs, je recherche juste "motavecdeschiffrestoutattaché"

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Bonjour,

    Sinon, pour la recherche de nom de fichier dans des fichiers zip, une commande de ce type devrait le faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -name '*.zip' -exec sh -c "zipinfo -1 {} | grep --label={} -H nomavecchiffre"  \;
    Et si on veut rechercher un pattern qui se trouve dans un fichier qui est dans une archive zip:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    zipgrep pattern archive.zip [fichier_dans_le_zip]

  9. #9
    Invité
    Invité(e)
    Par défaut commande linux
    pas été très clair des le début et je m'en excuse.

  10. #10
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    sur la base de ce qu'a dit disedorgue précédemment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find / -name "*.tar.gz" -exec sh -c "tar -tzvf {} 2>/dev/null | grep --label={} -l nomavecchiffre" \;
    il suffisait de troquer unzip pour tar, j'ai également changé le grep -H en grep -l plus adapté

  11. #11
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Le -l ou le -H dépend du besoin qui ici de toute façon n'est pas assez explicite:

    -Si c'est un nom de fichier qu'il cherche dans l'archive tar.gz, ça le fait, mais si c'est le "nom de l'archive" + "le nom du fichier dans l'archive" dans lequel on trouve son fameux pattern (et ici je parle du contenu du fichier et non pas du nom de fichier), alors on est plus dans le cas du zipgrep mais pour un tar.gz.
    Et là, c'est un peu plus compliqué...

    Donc, quel est le besoin ???
    Cordialement.

  12. #12
    Invité
    Invité(e)
    Par défaut commande shell
    je recherche un nom dans une log qui a été zippé.

  13. #13
    Invité
    Invité(e)
    Par défaut commande linux
    Merci beaucoup. J'en suis pas à ce niveau là, j'essaie de comprendre la commande avant de la taper. Le Man m'aide .. je ne comprends pas cependant à quoi servent les parenthèses et le 2>/dev/null ainsi que le sh. ...


    Citation Envoyé par BufferBob Voir le message
    salut,

    sur la base de ce qu'a dit disedorgue précédemment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find / -name "*.tar.gz" -exec sh -c "tar -tzvf {} 2>/dev/null | grep --label={} -l nomavecchiffre" \;
    il suffisait de troquer unzip pour tar, j'ai également changé le grep -H en grep -l plus adapté

  14. #14
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    Bonjour

    En quoi les solutions qui ont été données avec détails ne remplissent-ils pas ton besoin ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  15. #15
    Invité
    Invité(e)
    Par défaut commande linux
    bonjour
    encore une fois je n'ai pas votre niveau,très loin loin de là.. j'essaie d'abord de comprendre ce que mon donne avant de me lancer. Je ne peux que mieux progresser de cette facon et je vais y arriver
    Merci pour vos aides

  16. #16
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    Ca aussi c'est bien pour progresser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    man find
    man tar
    man grep
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  17. #17
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 539
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 539
    Points : 19 361
    Points
    19 361
    Par défaut
    je recherche un nom dans une log qui a été zippé.
    "zippé" est une expression windowsienne, on est beaucoup plus précis sur unix/linux

    un fichier tar.gz n'est pas un simple fichier compressé, c'est une archive (c'est-à-dire un ou plusieurs fichiers "concaténés") compressée. de là l'ambiguïté de ta demande !

    pour progresser : apprends à exposer ton problème de façon claire et détaillée.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  18. #18
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Les "{}" sont ici spécifiques à la commande find, celle-ci remplacera ce mot par se qu'il aurait envoyé sur la sortie standard, avant de passer la main à la commande qui est située après son connecteur -exec et qui se finit au "\;"
    Donc find executera la commande:
    en remplaçant le mot "{}" par ce qu'il a trouvé (et ceci pour chaque fichier "*.tar.gz" qu'il a trouvé).
    Cordialement.

  19. #19
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 238
    Points : 13 443
    Points
    13 443
    Par défaut
    /dev/null est la poubelle, le broyeur de fichiers, le trou noir de Linux. Quand tu rediriges le deuxième canal dans le "fichier" /dev/null, il y a de fortes chances que ce canal soit celui des erreurs et que les messages d'erreurs soient jetés à la poubelle, donc non affichés.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  20. #20
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 266
    Points : 12 681
    Points
    12 681
    Par défaut
    Si le besoin est équivalent à zipgrep mais pour des archives "tar.gz", voici un exemple qui traite le cas suivant:
    -Dans un répertoire, on a une série d'archive de type "tar.gz", dans lesquelles il y a des fichiers de logs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ls *.tar.gz
    1.tar.gz  2.tar.gz
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ tar tzf 1.tar.gz
    1.log
    2.log
    $ tar tzf 2.tar.gz
    3.log
    4.log
    Dans ces fichiers de logs, je voudrais trouver le pattern "didi : 1000".
    En principe, il faudrait pour chaque archive, extraire les fichiers, et faire un grep dans les fichiers extraits.

    Donc voici une méthode qui permet de faire le grep sans extraire les fichiers sur disque (en fait, cela reprend le principe précédent avec quelques améliorations):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ find . -name '*.tar.gz' -exec sh -c "tar --to-command='grep --label={} -l \"didi : 1000\"' --transform='s/.*/TAR_Fichier:&/' --show-stored-name -xvzf {} 2>/dev/null  | sed -n '/^TAR_Fichier:/{h;b;};G;s/\nTAR_Fichier:/==>/p'" \;
    ./2.tar.gz==>4.log
    ./1.tar.gz==>2.log
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/01/2012, 15h50
  2. Réponses: 1
    Dernier message: 26/12/2010, 22h20
  3. Trouver une série de chiffres dans du texte
    Par Sancti_Eyes dans le forum Langage
    Réponses: 4
    Dernier message: 25/08/2009, 23h54
  4. Rechercher une chaîne de caractère dans une série de fichier
    Par Edoxituz dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/02/2006, 13h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo