[find]Exclure un répertoire d'une recherche

Bonjour,
j’ai un problème : j’arrive pas à exclure un répertoire avec find. J’ai trouvé ça en cherchant sur google, mais l’astuce a pas l’air de marcher, mon code :

glorf@debian-desktop:~/test$ find -name "*.php" ./2/2.php ./3/3.php ./1.php glorf@debian-desktop:~/test$ find -name "*.php" -path '2/' -prune -o -name *.php ./1.php

Là, il m’exclut tous les dossiers … Sachant que c’est pour traiter derrière (avec -exec), je peux pas faire un grep dessus.
Cordialement,
Glorf.

Bonjour,

$ mkdir -p php/{hph,phph,aaaa}
$ touch php/{hph,phph,aaaa}/php{1,2,3}.php
$ printf "%s\n" */*/*
php/aaaa/php1.php
php/aaaa/php2.php
php/aaaa/php3.php
php/hph/php1.php
php/hph/php2.php
php/hph/php3.php
php/phph/php1.php
php/phph/php2.php
php/phph/php3.php

$ find . -path './*aaaa' -prune -o  -name '*.php' -print
./php/hph/php3.php
./php/hph/php1.php
./php/hph/php2.php
./php/phph/php3.php
./php/phph/php1.php
./php/phph/php2.php

A titre d’info, si tu utilises bash et en particulier une version >=4 :

$ shopt -s extglob globstar
$ mkdir -p php/hph/titi
$ touch php/hph/titi/php5.php
$ printf "%s\n" **/*.php
php/aaaa/php1.php
php/aaaa/php2.php
php/aaaa/php3.php
php/hph/php1.php
php/hph/php2.php
php/hph/php3.php
php/hph/titi/php5.php
php/phph/php1.php
php/phph/php2.php
php/phph/php3.php

$ printf "%s\n" **/!(titi)/*.php
php/aaaa/php1.php
php/aaaa/php2.php
php/aaaa/php3.php
php/hph/php1.php
php/hph/php2.php
php/hph/php3.php
php/phph/php1.php
php/phph/php2.php
php/phph/php3.php

Merci pour l’astuce, par contre je n’arrive pas à exclure plusieurs répertoires :

find . -path './*{Images,yofrankie}' -prune -o -name "*.jpg"
Me sors aussi ce qu’il y a dans Images et yofrankie :confused:

Les pattern de find ne sont pas identiques à ceux du shell :

$ find . -path './*Images' -prune -o -path './yofrankie' -prune -o -name "*.jpg" -print

# ou 

$ find . ! -regex '.*/\(Images\|yofrankie\)/.*' -name '*.jpg'

et il ne faut pas oublier le -print pour la première solution

Merci pour la regex, je note ^^. Mais pourquoi il faut pas mettre le -print ? (ça marche sans chez moi)
Je passe en résolu sinon

[quote=“Glorf”]Mais pourquoi il faut pas mettre le -print ? (ça marche sans chez moi)
[/quote]

Cela signifie que si tu ne mets pas -print, l’action par défaut est d’afficher tous les fichiers trouvés.
Ce qui équivaut à ceci :

find . \( -path './*/Images' -prune -o -path './*/yofrankie' -prune -o -name "*.jpg" \) -print

or en mettant -print, tu l’associes uniquement à la dernière condition, c.a.d :

find . \( -path './*/Images' -prune -o -path './*/yofrankie' -prune \)  -o \( -name "*.jpg"  -print \)

Comme on précise une action, elle n’est réalisée qu’à la condition associée