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

11

Eu corro 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 ?

    
por Akshay Patel 18.04.2015 / 21:33

2 respostas

28

Você perdeu 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 final do predicado -exec de find .

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

Você estava usando \ no final, isso indica que seu shell continuará recebendo entrada via PS2 (indicado por > ), você digitou IMAG1806.jpg novamente, então o comando inteiro se torna:

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

Como você pode ver, este não é um comando válido com IMAG1806.jpg no final, sem fechamento do predicado -exec e sem espaço entre {} e \; .

    
por heemayl 18.04.2015 / 21:36
6

Você pode simplesmente

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

Da 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.
    
por Burhan Khalid 19.04.2015 / 06:47