tl; dr: -deleten’est pas requis par POSIX, -execc’est.
Faits
Page de manuel POSIX 1003.1 pourfind spécifie -execmais pas -delete.
Cela signifie -execdevrait fonctionner pratiquement partout. Je serais surpris de constater findque cela a -deletesans -exec. Le contraire est tout à fait possible. Les systèmes particulièrement légers qui utilisent busyboxtendent à fournir uniquement des options de base en ligne de commande.
Par exemple, j'ai un OpenWRT sur l'un de mes routeurs et il findcomprend -exec, il ne comprend pas -delete.
Ne pas avoir -deleten'est pas un gros problème quand vous avez -exec rm …. D'autre part -deletene peuvent pas remplacer -execen général. C'est une conception judicieuse pour permettre l'omission en -deletepremier.
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 -execet publient leurs propres commandes (par exemple, ici sur Super User). Certains d'entre eux peuvent même ne pas savoir -deleteexiste.
Quelques fois j'ai vu (ou donné) des remarques telles que "Vous pouvez utiliser à la -deleteplace". 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 -deletechaque fois que cela -exec rm {} \;apparaît. La raison en est -deleteque ne crée pas un nouveau processus, alors qu'il -exec rm {} \;appelle un distinct rmpour chaque fichier correspondant. Si vous ne pouvez pas utiliser, -deletealors votre prochaine pensée devrait être de -exec rm {} +pouvoir supprimer plusieurs fichiers avec un seul rm(même s'il en aura rmbesoin 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 -deleteest généralement sans danger ici sur Super User, je pense. La plupart des questions spécifient de "gros" systèmes d'exploitation, les findcommandes sont riches en options. Et même s'il y a un utilisateur dont le nombre findest 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 -deletene pas obtenir de tels commentaires. En cas de problème, un utilisateur accédera simplement au lien suivant renvoyé par Google.