Forum Programmation.shell find -o bizzare

Posté par  .
Étiquettes : aucune
0
1
août
2006
Bonjour,

Il y a quelque chose que je ne comprend pas avec find:
si je fais
find ./ -name '*.cpp' -or -name '*.h' -print
Il ne va m'afficher que les .h
inversement,
find ./ -name '*.h' -or -name '*.cpp' -print
c'est les .cpp qui sortent...
Pourquoi find ne marche pas?
Quelqu'un peux m'aider la-dessus?
Merci,
Florent
  • # c'est un problème de groupage

    Posté par  . Évalué à 9.

    le -print est attaché à la deuxième partie du -or, comme on peut le voir en essayant ceci : find . -name '*.cpp' -print -or -name '*.h' -print

    Plus simplement, on peut utiliser des parenthèses : find . \( -name '*.cpp' -or -name '*.h' \) -print
    • [^] # Re: c'est un problème de groupage

      Posté par  . Évalué à 5.

      On peut aussi utiliser l'option trop souvent ignorée -regex :

      find . -regex '.*\(h\|cpp\)$' -print

      Ca fait un peu beaucoup pour un cas aussi simple, mais c'est parfois pratique.
      • [^] # Re: c'est un problème de groupage

        Posté par  . Évalué à 1.

        Merci!
      • [^] # Re: c'est un problème de groupage

        Posté par  (site web personnel) . Évalué à 0.

        -regex est une extension non standard.

        pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

      • [^] # Re: c'est un problème de groupage

        Posté par  . Évalué à 1.

        Cette option est très pratique, mais cela impose d'avoir un find issu de la GNU, sur d'autres Unix, on ne retrouve pas cette option.

        Je pense qu'il est important de préciser ce genre de détail car quand on se retrouve sur autre chose que Linux on est vite perdu et il faut pouvoir se débrouiller quand même.
  • # syntaxe plus simple

    Posté par  . Évalué à 1.

    Moi j'utilise d'habitude find -name \*.c -o -name \*.cpp, tout simplement. Pas besoin de "-print" ni de répertoire à préciser (et sinon "." suffit, le "/" en plus ne sert à rien).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.