"Знайти: відсутній аргумент до` -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"? Це в одному каталозі, тож ви знаєте, як воно називається.
TheWanderer

@ Zacharee1 - припустив би, що ОП робить "сухий пробіг". Я б розглядав можливість використання -i з rm на випадок, якщо ви знайдете більше файлів, які тоді були призначені або, принаймні, запущені без -exec та переглянути список файлів
Panther

1
@ Zacharee1: Команда find видалить усі файли з цим ім'ям у поточному каталозі та всіх його підкаталогах (на будь-якій глибині).
Денніс

3
Або замість того, щоб -exec rmпросто використовувати -deleteбезпосередньо.
Брайам

Відповіді:


30

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

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

;вказує на закінчення -execприсудка find.

Також зауважте, що ми використовували, \;тобто \перед тим, ;щоб уникнути інтерпретації ;оболонки, інакше оболонка буде розглядатись ;як кінець всієї findкоманди і findвидасть ту саму помилку. Ви також можете використовувати ';'замість \;.

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

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

Як ви бачите, це зовсім не дійсна команда з IMAG1806.jpgкінцем, без закриття -execпредиката та без пробілу між {}і \;.


1
"Ви пропустили" в ;кінці "Спасибі за це, витративши 10 хвилин на усунення несправностей, перш ніж я зрозумів, що випадково набрав :замість цього ;, на цих сучасних екранах HD його легко пропустити ...
user5359531

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.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.