Chciałem usunąć pliki o rozmiarze większym niż 2 MB w określonym folderze. Więc pobiegłem:
find . -size +2M
I mam listę dwóch plików
./a/b/c/file1
./a/f/g/file2
Więc uruchamiam:
find . -size +2M -exec rm ;
i dostaję komunikat o błędzie Find: missing argument to -exec
Sprawdzam składnię na stronie podręcznika i mówi: -exec command ;
Zamiast tego próbuję
find . -size +2M -exec rm {} +
I to działa. Rozumiem, że {} sprawia, że wykonuje polecenie jak rm file1 file2
zamiast rm file1; rm file2;
.
Dlaczego więc pierwszy nie zadziałał?
ODPOWIEDŹ:
Chyba musiałem kilka razy RTFM, aby w końcu zrozumieć, co mówi. Mimo że pierwszy przykład nie pokazuje {}, nawiasy klamrowe są wymagane we wszystkich przypadkach. A następnie dodaj \; lub + w zależności od żądanej metody. Nie czytaj tylko nagłówka. Przeczytaj także opis. Rozumiem.
Ze względu na wydajność zwykle lepiej jest używać xargs:
źródło
Nie użyłbym do tego -exec. find może również usunąć same pliki:
(prawdopodobnie jest to GNUism, nie wiem, czy znajdziesz to w znalezieniu innym niż GNU)
źródło
Jak udokumentowano, -exec wymaga {} jako symbolu zastępczego dla wyniku find.
Ostateczny przewodnik dotyczący używania narzędzi bash i GNU znajduje się tutaj
Jak widać, wyraźnie pokazuje drugie polecenie użyte jako przykład.
źródło