find directory -not \( -name temp -o -name 3.php -o -name c -prune \) -delete
Un rapide test a montré que cela fonctionnait dans ce cas précis, du moins. S'il y a des sous-répertoires nommés par exemple c
ou autre, je crois que vous pourriez les exclure aussi. Il est facile de le faire fonctionner dans les cas généraux, mais définir une commande find en toute généralité demande quelques essais.
Testez sans l'instruction "-delete" pour voir quels fichiers sont concernés.
PRESSTOP : find
change son comportement lorsque -delete
est spécifié ( find
avertit à ce sujet et ne veut pas continuer lorsque -prune
est spécifié). Vous pouvez toujours diriger la sortie vers xargs
y rm
ou écrire -execdir rm {} \;
au lieu de -delete
mais
Exemples :
find directory -not \( -name directory -o -name 3.php -o -name c -prune \) -execdir rm -r {} \;
find directory -not \( -name directory -o -name 3.php -o -name c -prune \) -print0 | xargs -0 rm -r
C'est toujours une affaire délicate, et lorsque le but est de supprimer des fichiers, il faut faire des tests approfondis. J'ai un certain nombre de cas similaires find
et je ne peux pas dire que je n'étais pas nerveux de les libérer :-)