Le sujet de la suppression des fichiers est abordé dans la section "Cleaning Up" de la documentation GNU findutils. Vous pouvez la lire sur votre système en utilisant "info find", ou dans Emacs. Vous pouvez également la consulter en ligne à l'adresse http://www.gnu.org/software/findutils/manual/html_node/find_html/Cleaning-Up.html#Cleaning-Up .
find .... -delete
C'est l'option la plus sûre (contre les courses de liens symboliques) et la plus performante (puisqu'il n'est pas nécessaire d'exécuter quoi que ce soit ou d'effectuer un changement de contexte lorsque le pipe buffer est plein). Mais gardez à l'esprit que -delete implique -depth.
find .... | xargs rm ...
Ceci est dangereux dans les situations où d'autres personnes ont un accès en écriture à l'arbre dans lequel vous faites le nettoyage. Par exemple, supposons que la commande find ait décidé que /var/tmp/scratch/me/.ssh/config correspond à ses besoins et qu'elle imprime donc ces noms sur stdout. La commande xargs lira cela et l'ajoutera à une structure de données. Peu de temps après (lorsque xargs aura lu le nombre d'octets indiqué par la valeur par défaut de l'option -s), xargs bifurquera et exécutera rm pour le supprimer. Cependant, il est possible qu'entre-temps, quelqu'un d'autre ait fait cela :
$ cd /var/tmp/scratch
$ mv me me.old
$ ln -s /root me
Ensuite, lorsque rm va supprimer /var/tmp/scratch/me/.ssh/config, il va lancer l'appel système unlink("/var/tmp/scratch/me/.ssh/config"). Comme le noyau résoudra le lien symbolique pour vous, cela équivaut à ce qu'il appelle unlink("/root/.ssh/config"). Si le processus xargs était exécuté en tant que root, alors /root/.ssh/config sera supprimé, malgré le fait que vous n'ayez pas spécifié -L sur la ligne de commande. Pour cette raison, si la sécurité est importante, utilisez -delete. Vous pouvez en savoir plus sur ce sujet dans la section "Security Considerations" du manuel GNU find.
find .... -exec rm ...;
Parce que cela implique également fork/exec, il a les mêmes problèmes de sécurité que je mentionne ci-dessus.
En bref, la seule raison de ne pas utiliser -delete est la compatibilité avec les systèmes qui ne supportent pas -delete.