Chcę poznać znaczenie {} +
w exec
poleceniu, a jaka jest różnica między {} +
i {} \;
. Dokładnie, jaka jest różnica między tymi dwoma:
find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;
Chcę poznać znaczenie {} +
w exec
poleceniu, a jaka jest różnica między {} +
i {} \;
. Dokładnie, jaka jest różnica między tymi dwoma:
find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;
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:
$ find /etc/rc* -exec echo Arg: {} ';'
Arg: /etc/rc.common
Arg: /etc/rc.common~previous
Arg: /etc/rc.local
Arg: /etc/rc.netboot
Wszystkie poniższe argumenty
find
są 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 xargs
polecenia, więc użyje jak największej liczby argumentów na polecenie, aby uniknąć przekroczenia maksymalnego limitu argumentów na wiersz.
Przykład:
$ find /etc/rc* -exec echo Arg: {} '+'
Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
Linia poleceń jest budowana przez dołączenie każdej wybranej nazwy pliku na końcu.
{}
W poleceniu dozwolona jest tylko jedna instancja
Zobacz też:
Biorąc pod uwagę, że polecenie find znajduje się poniżej trzech plików:
fileA
fileB
fileC
Jeśli używasz znaku -exec
plus ( +
),
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 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 ( ;
),
find . -type f -exec chmod 775 {} \;
To będzie:
chmod 775 fileA
chmod 775 fileB
chmod 775 fileC
Zgodnie z man find
:
-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.