tl; dr: -delete
не требуется для POSIX, -exec
есть.
факты
Страница справки POSIX 1003.1 для find
определяет -exec
но не -delete
.
Это означает, что -exec
должен работать практически везде. Я был бы удивлен, find
что есть -delete
без -exec
. Обратное вполне возможно. Особенно легкие системы, которые используют busybox
обычно предоставляют только основные параметры командной строки.
Например, у меня есть OpenWRT на одном из моих маршрутизаторов, и его find
понимает -exec
, не понимает -delete
.
Отсутствие -delete
не имеет большого значения, если у вас есть -exec rm …
. С другой стороны -delete
не может заменить -exec
в целом. Это мудрый дизайн, позволяющий сначала опустить -delete
.
Личный опыт, наблюдения и мнения
Выше должно быть основной причиной, почему -exec rm {} \;
так широко рекомендуется. Вторичным может быть эффект снежного кома. Пользователи читают статьи и примеры, знакомятся с -exec
и публикуют свои собственные команды (например, здесь, в Super User). Некоторые из них могут даже не знать, что -delete
существует.
Несколько раз я видел (или давал) замечания типа «Вы можете использовать вместо этого -delete
». И ответы были такие: «Спасибо, я этого не знал». Я не помню ни одного ответа «Я знаю, но это не POSIX».
Сказав все это, я склонен упоминать -delete
всякий раз, когда -exec rm {} \;
появляется. Причина в том, что -delete
не создает новый процесс, а -exec rm {} \;
вызывает отдельный rm
для каждого соответствующего файла. Если вы не можете использовать -delete
то ваша следующая мысль должна быть -exec rm {} +
которая может удалить несколько файлов одним rm
(тем не менее, при необходимости он вызовет rm
более одного раза).
Почему -exec … +
рекомендуется? Это может быть из-за его ограничений. Я могу представить, как неопытный пользователь думает: «Это работает с rm
, позвольте мне использовать его с mv
!«Тогда -exec mv {} foo/ +
не работает, потому что {}
должен быть в конце, непосредственно перед +
. Пользователь расстроен и бежит обратно к маме Windows.
Я рекомендую -delete
как правило, безопасен здесь на Super User. Большинство вопросов указывают на "большие" ОС, команды find
там богаты опциями. И даже если есть пользователь, чья find
ограничена, я, вероятно, получу обратную связь. Он или она говорит, что решение не работает для них, и я предлагаю -exec rm …
вместо этого, объясните проблему и т.д.
Отдельная статья, которая рекомендует -delete
, не получит такой обратной связи. В случае каких-либо проблем пользователь просто перейдет на следующую ссылку, возвращенную Google.