tl; dr: -delete
não é requerido pelo POSIX, -exec
é.
Fatos
Página man do POSIX 1003.1 para find
especifica -exec
mas não -delete
.
Isso significa que -exec
deve funcionar virtualmente em todos os lugares. Eu ficaria surpreso ao encontrar find
que tem -delete
sem -exec
. O oposto é bem possível. Especialmente sistemas leves que usam busybox
tendem a fornecer apenas opções básicas de linha de comando.
Por exemplo Eu tenho um OpenWRT em um dos meus roteadores e seu find
entende -exec
, ele não entende -delete
.
Não ter -delete
não é grande coisa quando você tem -exec rm …
. Por outro lado, -delete
não pode substituir -exec
em geral. É um design inteligente permitir omitir -delete
primeiro.
Experiência pessoal, observações e opiniões
O acima deve ser o principal motivo pelo qual -exec rm {} \;
é tão amplamente recomendado. O secundário pode ser um efeito de bola de neve. Os usuários lêem artigos e exemplos, se familiarizam com -exec
e publicam seus próprios comandos (por exemplo, aqui no Superusuário). Alguns deles podem nem saber que -delete
existe.
Algumas vezes vi (ou dei) comentários como 'Você pode usar -delete
. E as respostas foram como "Obrigado, eu não sabia disso". Não me lembro de nenhuma resposta "Eu sei, mas isso não é POSIX '.
Tendo dito tudo isso, eu costumo mencionar -delete
sempre que -exec rm {} \;
aparece. O motivo é -delete
não gerar um novo processo, enquanto -exec rm {} \;
invoca o rm
separado para cada arquivo correspondente. Se você não puder usar -delete
, seu próximo pensamento deverá ser -exec rm {} +
, que pode remover vários arquivos com cada rm
.
Por que razão não é -exec … +
amplamente recomendado? Pode ser por causa de suas limitações. Eu posso imaginar um usuário inexperiente pensando "Isso funciona com rm
, deixe-me usá-lo com mv
! ' Então -exec mv {} foo/ +
não funciona porque {}
precisa estar no final, logo antes de +
. O usuário fica frustrado e volta para o
Recomendar -delete
costuma ser seguro aqui no Superusuário, eu acho. A maioria das perguntas especificam comandos "grandes" de OS-es, find
que são ricos em opções. E mesmo que haja um usuário cujo find
seja limitado, provavelmente receberei feedback. Ele ou ela diz que a solução não funciona para eles e sugiro -exec rm …
, explique o problema, etc.
Um artigo independente que recomenda -delete
não receberá esse feedback. Em caso de problemas, o usuário simplesmente acessará o próximo link retornado pelo Google.