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

Administration système Discussion :

trouver le fichier zippé qui contient une expression


Sujet :

Administration système

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 219
    Points : 174
    Points
    174
    Par défaut trouver le fichier zippé qui contient une expression
    Bonjour,

    Je ne vois pas comment utiliser find ou grep pour avoir en sortie le nom du ou des fichiers gzippés contenant une expression.

    Si je fais un simple zcat --quiet *.gz | grep -l <expression> grep ne retourne pas le nom du fichier puisque le flux est issu de zcat.

    Comment faire ?

    Merci.

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Une solution consiste à parcourir les ficheirs un par un, et si tu trouves ta chaine, alors tu affiches le nom du fichier.

    Ce qui donne un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for i in `ls *.gz`
    do
      zcat --quiet $i | grep <expression> 2>&1 >/dev/null
      if [ $? -eq 0 ]
      then
        echo "$i"
      fi
    done
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 219
    Points : 174
    Points
    174
    Par défaut
    Sous shell, j'ai toujours l'impression que je peux tout faire avec deux commandes (généralement find ou un pipe).

    Faire tout un script, ça implique de le sauvegarder, etc.

    Bref, j'espérais une recette plus concise. Mais merci tout de même pour ta réponse

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 119
    Points
    28 119
    Par défaut
    Bonjour,

    Pourquoi pas simplement exécuter le code que j'ai mis directement dans ton shell ? Pourquoi veux-tu absolument en faire un script ?
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 219
    Points : 174
    Points
    174
    Par défaut
    Parce que cette opération pourra être utile assez souvent.

    Mais comme je te le disais, mon but était surtout de trouver une astuce avec sed|find|grep. J'apprends toujours bcp en décryptant les situations complexes résolues en 2 commandes.

    Qd je fais une boucle, j'ai l'impression de choisir la facilité (ce n'est pas une mauvaise chose, mais j'apprends rien en faisant ainsi.)

  6. #6
    Candidat au Club
    Inscrit en
    Août 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    bonjour ,

    essais ça .

    find / -type f -name *.gz -exec grep -l <expression> {} \;

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 219
    Points : 174
    Points
    174
    Par défaut
    find ne gère pas les flux compressés, à ma connaissance.
    Donc cette commande ne pourra fonctionner, mais merci pour la tentative.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Août 2008
    Messages : 505
    Points : 712
    Points
    712
    Par défaut
    find -name '*.gz' -exec sh -c ' gunzip -dc $0 | grep stable' {} \; -ls

    Ca devrait marcher

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    C'est peu être un peu tard, mais j'en ai eu besoin donc si ça peu aider :
    Je me suis inspiré de gangsoleil mais son script ne machait pas chez moi.

    Pour les fichiers bzip2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #/bin/bash
     
    for i in `ls *.bz2`
    do
      result=`bzcat $i | grep "expression" 2> /dev/null`
      if [ -z "${result}" ]
      then
        echo "$i"
      fi
    done
    Pour les fichiers gz :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #/bin/bash
     
    for i in `ls *.gz`
    do
      result=`zcat $i | grep "expression" 2> /dev/null`
      if [ -z "${result}" ]
      then
        echo "$i"
      fi
    done
    Au contraire pour trouver les fichiers qui contiennent une expression :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Remplacer :
    if [ -z "${result}" ]
    par :
    if [ ! -z "${result}" ]

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 219
    Points : 174
    Points
    174
    Par défaut
    Je reviens un peu tard...

    Le find ne fonctionne pas.
    J'ai donc utilisé un bête script, dommage. En gros la même chose que ci-dessus, avec $1 pour l'expression et $2 pour le chemin.

  11. #11
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Sinon tu peux également utiliser zgrep :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     find ./ -name "*.gz" -exec zgrep -l JE_RECHERCHE {} \;

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    505
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Août 2008
    Messages : 505
    Points : 712
    Points
    712
    Par défaut
    Ah bon, ça ne marche pas ? Curieux. Chez moi, ça fonctionne...

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 219
    Points : 174
    Points
    174
    Par défaut
    Ben ça alors, zgrep ! Je ne connais pas, ça me sera forcément utile, merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Trouver la dernière cellule qui contient une valeur définie
    Par apnw7931 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/02/2011, 14h28
  2. Réponses: 2
    Dernier message: 30/12/2010, 22h08
  3. Lecture d'un fichier qui contient une seule ligne
    Par ysahel dans le forum Débuter
    Réponses: 3
    Dernier message: 20/01/2010, 17h46
  4. telecharger un fichier zip qui contient une liste de fichier à supprimer
    Par joulive dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 29/07/2009, 13h54
  5. Réponses: 3
    Dernier message: 16/07/2007, 21h47

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