„Find: brakujący argument dla„ -exec ”podczas używania„ -exec rm -f {} \ ”

12

Uruchomię to polecenie:

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

Mam wynik poniżej:

> IMAG1806.jpg

Error:
find: missing argument to `-exec'

jakie jest dokładne polecenie znajdowania dowolnego pliku z bieżącego katalogu i usuwania za pomocą -exec?

Akshay Patel
źródło
1
Nie możesz po prostu rm "IMAG1806.jpg"? Jest w tym samym katalogu, więc wiesz, jak się nazywa.
Wędrowiec
@ Zacharee1 - zakładam, że OP robi „próbę”. Zastanowiłbym się nad użyciem -i z rm na wypadek, gdyby znaleźć „znajdowało” więcej plików, niż zamierzano, lub przynajmniej działało bez -exec i przeglądało listę plików
Panther
1
@ Zacharee1: Polecenie find usunie wszystkie pliki o tej nazwie z bieżącego katalogu i wszystkich jego podkatalogów (na dowolnej głębokości).
Dennis
3
Lub zamiast używać -exec rmwystarczy użyć -deletebezpośrednio.
Braiam

Odpowiedzi:

30

Przegapiłeś „a” ;na końcu (oraz spację między {}i ;). Prawidłowe polecenie to:

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

;wskazuje koniec -execpredykatu find.

Zauważ też, że użyliśmy \;np. \Przed, ;aby uniknąć interpretacji ;przez powłokę, w przeciwnym razie powłoka będzie traktować ;jako koniec całej findkomendy i findwygeneruje ten sam błąd. Możesz także użyć ';'zamiast \;.

Używałeś \na końcu, oznacza to, że twoja powłoka będzie nadal pobierać dane wejściowe przez PS2(wskazane przez >), wpisałeś IMAG1806.jpgponownie, więc całe polecenie staje się:

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

Jak widać, nie jest to w ogóle poprawne polecenie z IMAG1806.jpgkońcem, bez zamykania -execpredykatu i bez spacji między {}i \;.

heemayl
źródło
1
„Przegapiłeś„ a ” ;na końcu” Dzięki za to spędziłeś 10 minut na rozwiązywaniu problemów, zanim zdałem sobie sprawę, że przypadkowo wpisałem :zamiast ;na tych nowoczesnych ekranach HD, których łatwo przeoczyć ...
user5359531
7

Możesz po prostu

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

Ze strony podręcznika:

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
źródło