tl; dr: -delete
n’est pas requis par POSIX, -exec
c’est.
Faits
Page de manuel POSIX 1003.1 pourfind
spécifie -exec
mais pas -delete
.
Cela signifie -exec
devrait fonctionner pratiquement partout. Je serais surpris de constater find
que cela a -delete
sans -exec
. Le contraire est tout à fait possible. Les systèmes particulièrement légers qui utilisent busybox
tendent à fournir uniquement des options de base en ligne de commande.
Par exemple, j'ai un OpenWRT sur l'un de mes routeurs et il find
comprend -exec
, il ne comprend pas -delete
.
Ne pas avoir -delete
n'est pas un gros problème quand vous avez -exec rm …
. D'autre part -delete
ne peuvent pas remplacer -exec
en général. C'est une conception judicieuse pour permettre l'omission en -delete
premier.
Expérience personnelle, observations et opinions
Ce qui précède devrait être la principale raison pour laquelle il -exec rm {} \;
est si largement recommandé. Le secondaire peut être un effet boule de neige. Les utilisateurs lisent des articles et des exemples, se familiarisent avec -exec
et publient leurs propres commandes (par exemple, ici sur Super User). Certains d'entre eux peuvent même ne pas savoir -delete
existe.
Quelques fois j'ai vu (ou donné) des remarques telles que "Vous pouvez utiliser à la -delete
place". Et les réponses étaient comme "Merci, je ne le savais pas". Je ne me souviens d'aucune réponse "Je sais, mais ce n'est pas POSIX".
Cela dit, j'ai tendance à mentionner -delete
chaque fois que cela -exec rm {} \;
apparaît. La raison en est -delete
que ne crée pas un nouveau processus, alors qu'il -exec rm {} \;
appelle un distinct rm
pour chaque fichier correspondant. Si vous ne pouvez pas utiliser, -delete
alors votre prochaine pensée devrait être de -exec rm {} +
pouvoir supprimer plusieurs fichiers avec un seul rm
(même s'il en aura rm
besoin plus d'une fois).
Pourquoi n'est-il pas -exec … +
largement recommandé alors? C'est peut-être à cause de ses limites. Je peux imaginer un utilisateur inexpérimenté pensant "Cela fonctionne avec rm
, laissez-moi l'utiliser avec mv
!" Alors -exec mv {} foo/ +
ne fonctionne pas car il {}
faut être à la fin, juste avant +
. L'utilisateur est frustré et retourne à maman Windows.
La recommandation -delete
est généralement sans danger ici sur Super User, je pense. La plupart des questions spécifient de "gros" systèmes d'exploitation, les find
commandes sont riches en options. Et même s'il y a un utilisateur dont le nombre find
est limité, j'aurai probablement des retours. Il ou elle dit que la solution ne fonctionne pas pour eux et je suggère -exec rm …
plutôt, expliquer le problème, etc.
Un article autonome qui recommande de -delete
ne pas obtenir de tels commentaires. En cas de problème, un utilisateur accédera simplement au lien suivant renvoyé par Google.