Jest to man find(1)szczegółowo opisane, łatwo dostępne dla każdego. Nie bądź leniwy.
Miroslav Koškár,
Dzięki, drogi Miroslav, szukałem man exec!
Ach, nigdy wcześniej nie spotkałem się z {} +użytkowaniem. Zwykle używam do tego xargs (i często find ... -print0 | xargs -0 ...)
Odpowiedzi:
27
Użycie ;(średnika) lub +(znaku plus) jest obowiązkowe w celu zakończenia poleceń powłoki wywoływanych przez -exec/ execdir.
Różnica między ;(średnikiem) lub +(znakiem plus) polega na tym, w jaki sposób argumenty są przekazywane do parametru -exec/ find -execdir. Na przykład:
użycie ;spowoduje wykonanie wielu poleceń (osobno dla każdego argumentu),
Wszystkie poniższe argumenty findsą uważane za argumenty polecenia.
Ciąg {}jest zastępowany przez przetwarzaną nazwę bieżącego pliku.
użycie +spowoduje wykonanie możliwie najmniejszej liczby poleceń (ponieważ argumenty są łączone razem). Jest bardzo podobny do działania xargspolecenia, więc użyje jak największej liczby argumentów na polecenie, aby uniknąć przekroczenia maksymalnego limitu argumentów na wiersz.
Biorąc pod uwagę, że polecenie find znajduje się poniżej trzech plików:
fileA
fileB
fileC
Jeśli używasz znaku -execplus ( +),
find . -type f -exec chmod 775 {} +
To będzie:
chmod 775 fileA fileB fileC
Linia poleceń jest budowana przez dołączanie każdej pasującej nazwy pliku na końcu, co jest identyczne jak w przypadku xargsbudowania linii poleceń. Całkowita liczba wywołań polecenia ( chmodw tym przypadku) będzie znacznie mniejsza niż liczba dopasowanych plików.
-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 zbudowany w taki sam sposób, jak xargs buduje wiersze poleceń. W poleceniu dozwolona jest tylko jedna instancja „{}”. Polecenie jest wykonywane w katalogu startowym.
man find(1)
szczegółowo opisane, łatwo dostępne dla każdego. Nie bądź leniwy.man exec
!{} +
użytkowaniem. Zwykle używam do tego xargs (i częstofind ... -print0 | xargs -0 ...
)Odpowiedzi:
Użycie
;
(średnika) lub+
(znaku plus) jest obowiązkowe w celu zakończenia poleceń powłoki wywoływanych przez-exec
/execdir
.Różnica między
;
(średnikiem) lub+
(znakiem plus) polega na tym, w jaki sposób argumenty są przekazywane do parametru-exec
/ find-execdir
. Na przykład:użycie
;
spowoduje wykonanie wielu poleceń (osobno dla każdego argumentu),Przykład:
użycie
+
spowoduje wykonanie możliwie najmniejszej liczby poleceń (ponieważ argumenty są łączone razem). Jest bardzo podobny do działaniaxargs
polecenia, więc użyje jak największej liczby argumentów na polecenie, aby uniknąć przekroczenia maksymalnego limitu argumentów na wiersz.Przykład:
Zobacz też:
man find
źródło
Biorąc pod uwagę, że polecenie find znajduje się poniżej trzech plików:
Jeśli używasz znaku
-exec
plus (+
),To będzie:
Linia poleceń jest budowana przez dołączanie każdej pasującej nazwy pliku na końcu, co jest identyczne jak w przypadku
xargs
budowania linii poleceń. Całkowita liczba wywołań polecenia (chmod
w tym przypadku) będzie znacznie mniejsza niż liczba dopasowanych plików.Jeśli używasz
-exec
średnika (;
),To będzie:
źródło
Zgodnie z
man find
:źródło