Chcę poznać znaczenie {} +
w exec
i jaka jest różnica między {} +
a {} \;
. Dokładniej mówiąc, jaka jest różnica między tymi dwoma:
find . -type f -exec chmod 775 {} + find . -type f -exec chmod 775 {} \;
Komentarze
Odpowiedź
Użycie ;
(średnik) lub +
(znak plus) jest obowiązkowe w celu zakończenia poleceń powłoki wywoływanych przez -exec
/ execdir
.
Różnica między ;
(średnik) lub +
(znak plus) to sposób przekazywania argumentów do find „s -exec
/ -execdir
Na przykład:
-
użycie
;
spowoduje wykonanie wielu poleceń (oddzielnie 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 następujące argumenty do
find
są traktowane jako argumenty polecenia.Ciąg
{}
jest zastępowane bieżącą nazwą pliku e w trakcie przetwarzania. -
using
+
wykona najmniej możliwe polecenia (ponieważ argumenty są łączone). Działa bardzo podobnie do działania poleceniaxargs
, więc użyje jak największej liczby argumentów na polecenie, aby uniknąć przekroczenia maksymalnego limitu argumentów w wierszu.Przykład:
$ find /etc/rc* -exec echo Arg: {} "+" Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
Wiersz poleceń jest tworzony przez dołączenie każdej wybranej nazwy pliku na końcu.
W poleceniu dozwolone jest tylko jedno wystąpienie
{}
.
Zobacz także:
-
man find
- Używanie średnika (;) w porównaniu z plusem (+) z exec w find w SO
- Proste polecenie unix, co to jest {} i \; dla w SO
Komentarze
- Jest różnica i jedna główna. Patrz user1116056 ' s odpowiedź
Odpowiedź
Biorąc pod uwagę, że polecenie find dostaje się poniżej trzech plików:
fileA fileB fileC
Jeśli używasz -exec
z plusem (+
)
find . -type f -exec chmod 775 {} +
będzie to:
chmod 775 fileA fileB fileC
Linia poleceń jest tworzona przez dołączanie na końcu każdej pasującej nazwy pliku, co jest takie samo, jak xargs
buduje swoje wiersze poleceń. Całkowita liczba wywołań polecenia (w tym przypadku chmod
) będzie znacznie mniejsza niż liczba dopasowanych plików.
Jeśli używasz -exec
ze średnikiem (;
),
find . -type f -exec chmod 775 {} \;
będzie:
chmod 775 fileA chmod 775 fileB chmod 775 fileC
Odpowiedź
Zgodnie z man find
:
-exec polecenie {} + To wariant akcji -exec uruchamia określone polecenie na wybranych plikach, ale wiersz poleceń jest budowany poprzez dołączanie na końcu każdej wybranej nazwy pliku; całkowita liczba wywołań polecenia będzie znacznie mniejsza niż liczba dopasowanych plików. Linia poleceń jest zbudowana w taki sam sposób, w jaki xargs buduje swoje linie poleceń. W poleceniu dozwolone jest tylko jedno wystąpienie „{}”. Polecenie jest wykonywane w katalogu startowym.
man find(1)
szczegółowo i łatwo je znaleźć. Nie ' nie bądź leniwy.man exec
!{} +
. Zwykle używam do tego xargs (i częstofind ... -print0 | xargs -0 ...
)