Я хотел удалить файлы размером более 2 МБ в определенной папке. Итак, я побежал:
find . -size +2M
И я получил список из двух файлов
./a/b/c/file1
./a/f/g/file2
Поэтому я бегу:
find . -size +2M -exec rm ;
и я получаю сообщение об ошибке Find: missing argument to -exec
Я проверяю синтаксис на странице руководства, и он говорит -exec command ;
Поэтому вместо этого я стараюсь
find . -size +2M -exec rm {} +
И это работает. Я понимаю, что {} заставляет его выполнять команду как rm file1 file2
вместо rm file1; rm file2;
.
Так почему же первый не сработал?
ОТВЕТ:
Я полагаю, мне просто нужно было пару раз использовать RTFM, чтобы наконец понять, о чем идет речь. Хотя первый пример не показывает {}, скобки требуются во всех случаях. А потом либо добавь \; или + в зависимости от желаемого метода. Не просто читайте заголовок. Прочитайте описание, а также. Понял.
Ради эффективности обычно лучше использовать xargs:
источник
Я бы не использовал -exec вообще для этого. find также может удалить файлы самостоятельно:
(это, вероятно, GNUism, хотя, не знаю, найдете ли вы это в не-gnu find)
источник
Как задокументировано, -exec требует {} в качестве заполнителя для вывода find.
Полное руководство по использованию инструментов bash и GNU находится здесь
Как видите, он явно показывает вторую команду, которую вы использовали в качестве примера.
источник