«Find: отсутствует аргумент для` -exec '»при использовании« -exec rm -f {} \ »

12

Я запускаю эту команду:

~/shell_temp$ find . -type f -name "IMAG1806.jpg" -exec rm -f {}\

я получил вывод ниже:

> IMAG1806.jpg

Error:
find: missing argument to `-exec'

Что такое точная команда для поиска любого файла из текущей директории и удаления с помощью -exec?

Акшай Патель
источник
1
Вы не можете просто rm "IMAG1806.jpg"? Он находится в том же каталоге, так что вы знаете, как он называется.
Странник
@ Zacharee1 - предположил бы, что OP делает "пробный прогон". Я хотел бы рассмотреть возможность использования -i с rm на тот случай, если ваша команда find найдет больше файлов, чем предполагалось, или, по крайней мере, запустит без -exec и просмотрит список файлов
Panther
1
@ Zacharee1: команда find удалит все файлы с таким именем в текущем каталоге и во всех его подкаталогах (на любой глубине).
Деннис
3
Или вместо использования -exec rmпросто использовать -deleteнапрямую.
Брайам

Ответы:

30

Вы пропустили a ;в конце (и пробел тоже между {}и ;). Правильная команда:

find . -type f -name "IMAG1806.jpg" -exec rm -f {} \;

;указывает на конец -execпредиката find.

Также обратите внимание, что мы использовали \;ie \перед тем, ;чтобы избежать интерпретации ;by shell, иначе shell будет рассматриваться ;как конец всей findкоманды и findвыдаст ту же ошибку. Вы также можете использовать ';'вместо \;.

Вы использовали \в конце, это означает, что ваша оболочка продолжит принимать ввод через PS2(обозначено >), вы набрали IMAG1806.jpgснова, поэтому вся команда становится:

find . -type f -name "IMAG1806.jpg" -exec rm -f {}IMAG1806.jpg

Как вы можете видеть, эта команда вообще не является допустимой IMAG1806.jpgв конце, без -execпредиката и без пробела между {}и \;.

heemayl
источник
1
«Вы пропустили a ;в конце». Спасибо за это, потратил 10 минут на устранение неполадок, прежде чем я понял, что :вместо ;этих
слов
7

Вы можете просто

find . -type f -name 'IMAGE1806.jpg' -delete

Со страницы руководства:

Delete files; true if removal succeeded.  If the removal failed,
an  error message is issued.  If -delete fails, find's exit sta‐
tus will be nonzero (when it eventually exits).  Use of  -delete
automatically turns on the -depth option.
Бурхан Халид
источник