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 :

Option -prune avec la commande find


Sujet :

Shell et commandes GNU

  1. #1
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    mai 2004
    Messages
    10 134
    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 134
    Points : 28 044
    Points
    28 044
    Par défaut Option -prune avec la commande find
    Bonjour,

    Précision : je suis sous Solaris 5.8

    J'ai des soucis avec l'option -prune de find :

    Je cherche en fait à lister tous les fichiers sauf les .o à partir de . sauf ceux des répertoire CVS et Tests

    Donc j'ai regardé le man, et on trouve cet exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -name CVS -prune -o -print
    ce qui fonctionne très bien.


    En m'en inspirant, je suis donc arrivé à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -name "CVS" -prune -o -name "Tests" -prune -o -type f ! -name "*.o"
    ceci fonctionne presque, mais ca m'affiche le nom des répertoire (mais ne liste pas leur contenu, ce qui est déjà pas mal).

    Quelqu'un verrait-il où se situe mon erreur, ou tout du moins coment faire pour n'afficher que les fichiers ?

    Merci
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  2. #2
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Vu la spécif, je ferai plutôt un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -name "CVS" -prune -o -name "Tests" -prune -o -name "*.o" -prune -o -type f -print
    Mais je n'ai pas de Solaris pour vérifier ...
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  3. #3
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Dans un script que j'ai fait il y a longtemps, j'ai une ligne comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /home /partages \( -path '/partages/quarantine' -or -path '/partages/clamav' -or -path '/partages/info' -or -path '/partages/sauve' \) -prune -or -type f \( -mtime -1 -or -ctime -1 \) -printf %p: > $fictemp
    ça peut paraître un peu bizarre mais prune si je me souviens inverse une sélection, c'est pour cette raison que les OU logiques se tranforment en ET logiques

    Ici, on cherche tous les fichiers de /home et de /partages en excluant /partages/quarantine,/partages/clamav,/partages/info,/partages/sauve qui sont de type fichier dont la date de modiciation ou de création date de moins d'un jour.

    J'espère que ça fait avancer le schmilblick
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    je pense que tu l'as compris, il te faut des parenthèses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find . \( \( -name CVS -o -name Tests \) -prune \) -o -type f ! -name "*.o"

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    mai 2004
    Messages
    10 134
    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 134
    Points : 28 044
    Points
    28 044
    Par défaut
    Citation Envoyé par laurentschneider
    je pense que tu l'as compris, il te faut des parenthèses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find . \( \( -name CVS -o -name Tests \) -prune \) -o -type f ! -name "*.o"
    Sur ma machine, le résultat est le même qu'avec la commande que j'ai tapée ci-dessus, à savoir que le nom des répertoire est affiché :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ./General_conf/objs/Makefile
    ./Tests
    ./catalogs/CVS
    ./catalogs/Makefile
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  6. #6
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    mai 2004
    Messages
    10 134
    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 134
    Points : 28 044
    Points
    28 044
    Par défaut
    Citation Envoyé par 2Eurocents
    Vu la spécif, je ferai plutôt un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -name "CVS" -prune -o -name "Tests" -prune -o -name "*.o" -prune -o -type f -print
    Mais je n'ai pas de Solaris pour vérifier ...
    Ceci fonctionne très bien, merci beaucoup. Il ne me reste plus qu'à pratiquer pour arriver à écrire cette ligne directement la prochaine fois
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  7. #7
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par gangsoleil
    Ceci fonctionne très bien, merci beaucoup. Il ne me reste plus qu'à pratiquer pour arriver à écrire cette ligne directement la prochaine fois
    Si ça peut t'aider, voici la logique avec laquelle je l'ai construite
    On part de . :On ne descendra pas dans CVS :Ni dans Tests :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -name "Tests" -prune -o
    On ne prendra pas les .o :Et seuls les fichiers nous intéressent :Comme, bien sûr, on veut le résultat :J'ai préféré faire un -prune aussi sur les .o, plutôt qu'une négation de prédicat dont je ne savais pas comment elle entrerait en conjonction avec les autres.

    Si ça fonctionne, c'est presque par excès de prudence
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  8. #8
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Pas bien de faire les exercices des autres ...
    Nan chuis pas jaloux !
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

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

Discussions similaires

  1. problème avec la commande sed et find
    Par Botfounast dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 22/08/2011, 19h19
  2. probleme avec la commande find
    Par juin29 dans le forum AIX
    Réponses: 14
    Dernier message: 01/06/2011, 20h19
  3. extraire l'extension d'un fichier avec la commande find
    Par klem5 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 21/03/2011, 17h39
  4. TABulation avec printf de la commande FIND
    Par GoodWear dans le forum Linux
    Réponses: 0
    Dernier message: 16/11/2009, 09h37
  5. Incompréhension avec la commande "find"
    Par Charly94 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 28/12/2006, 18h17

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