Do czego służy polecenie + in find / path / -exec „{}” +?

13

Co jest +w find /path/ -exec command '{}' +zrobienia? w przeciwieństwie dofind /path/ -exec command '{}' \;

ksenoterracid
źródło

Odpowiedzi:

17

„+” Tworzy jeden duży wiersz poleceń ze wszystkich znalezionych plików, aby zminimalizować liczbę poleceń do uruchomienia.

Biorąc pod uwagę przypadek, że polecenie find znajdzie cztery pliki.

find . -type f -exec command '{}' \;

produkuje

command file1
command file2
command file3
command file4 

Z drugiej strony

find . -type f -exec command '{}' \+

produkuje

command file1 file2 file3 file4
ddeimeke
źródło
3
Jeśli wiesz xargs, -exec … {} +robi to samo -print | xargs …, ale bez problemów z cytowaniem ( -print0 | xargs -0jest inny sposób, ale jest mniej przenośny).
Gilles „SO- przestań być zły”
4

Ze strony podręcznika:

-exec polecenie {} +

Ten wariant akcji -exec uruchamia określone polecenie na wybranych plikach, ale linia poleceń jest budowana przez dołączenie każdej wybranej nazwy pliku na końcu; całkowita liczba wywołań polecenia będzie znacznie mniejsza niż liczba dopasowanych plików. Wiersz poleceń jest budowany w taki sam sposób, jak xargs buduje wiersze poleceń. W poleceniu dozwolona jest tylko jedna instancja „{}”. Polecenie jest wykonywane w katalogu startowym.

tante
źródło
1
człowiek, który jest bardzo ... zwięzły? Uważam, że brakuje mu głębi i jasności.
Xenoterracide
Pomysł nie polega na ślepym spawnowaniu jednego procesu dla każdego pliku, ale na zebraniu razem nazw plików i wywołaniu polecenia mniej razy. Przykład: zamiast tworzyć 3 różne procesy „rm FILENAME”, zbiera nazwy plików i robi „rm FILE1 FILE2 FILE3”.
tante
IIRC niektóre wersje xargs mają opcję grupowania tych nazw razem do określonego limitu, więc możesz z tego skorzystać, ale także uniknąć przepełnienia, gdy masz dużą listę.
Kevin Cantu,
(Sam w sobie jest przerażającym, małym językiem!)
Kevin Cantu
finddaje mi pół.
Matt Alexander