“Argumento find: ausente para` -exec '”ao usar“ -exec rm -f {} \ ”

12

Eu executo este comando:

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

eu tenho saída abaixo:

> IMAG1806.jpg

Error:
find: missing argument to `-exec'

Qual é o comando exato para encontrar qualquer arquivo do diretório atual e remover com -exec?

Akshay Patel
fonte
1
Você não pode apenas para rm "IMAG1806.jpg"? Está no mesmo diretório, para que você saiba como é chamado.
TheWanderer
@ Zacharee1 - assumiria que o OP está fazendo uma "corrida a seco". Eu consideraria usando um -i com rm apenas no caso de seu achado "achados" mais arquivos, em seguida, intencional ou, pelo menos, correndo sem a -exec e rever a lista de arquivos
Panther
1
@ Zacharee1: O comando find excluirá todos os arquivos chamados com esse nome no diretório atual e todos os seus subdiretórios (a qualquer profundidade).
Dennis
3
Ou, em vez de usar, -exec rmbasta usar -deletediretamente.
Braiam

Respostas:

30

Você perdeu o a ;no final (e também um espaço entre {}e ;). O comando correto é:

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

;indica o fim do -execpredicado de find.

Observe também que usamos \;ie \na frente ;para escapar da interpretação do ;shell, caso contrário, o shell será tratado ;como o final de todo o findcomando e findlançará o mesmo erro. Você também pode usar em ';'vez de \;.

Você estava usando \no final, isso indica que seu shell continuará recebendo entradas via PS2(indicado por >), você digitou IMAG1806.jpgnovamente, para que todo o comando se torne:

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

Como você pode ver, este não é um comando válido, com IMAG1806.jpgno final, sem fechamento de -execpredicado e sem um espaço entre {}e \;.

heemail
fonte
1
"Você perdeu a um ;no final" Obrigado por isso, passou 10 minutos a solução de problemas antes de eu percebi que eu tinha acidentalmente digitado :em vez de ;, por estes modernos telas HD a sua fácil perder ...
user5359531
7

Você pode simplesmente

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

Na página do manual:

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.
Burhan Khalid
fonte