Vreau să știu semnificația {} +
din exec
comandă și care este diferența dintre {} +
și {} \;
. Pentru a fi exact, care este diferența dintre aceste două:
find . -type f -exec chmod 775 {} + find . -type f -exec chmod 775 {} \;
Comentarii
Răspuns
Utilizarea ;
(punct și virgulă) sau +
(semnul plus) este obligatorie pentru a termina comenzile shell invocate de -exec
/ execdir
.
Diferența dintre ;
(punct și virgulă) sau +
(semnul plus) este modul în care argumentele sunt trecute în find „s -exec
/ -execdir
parametru. De exemplu:
-
folosind
;
va executa mai multe comenzi (separat pentru fiecare argument),Exemplu:
$ find /etc/rc* -exec echo Arg: {} ";" Arg: /etc/rc.common Arg: /etc/rc.common~previous Arg: /etc/rc.local Arg: /etc/rc.netboot
Toate argumentele următoare către
find
sunt considerate argumente pentru comandă.Șirul
{}
este înlocuit de fișierul curent nam Se procesează. -
folosind
+
va executa cele mai puține comenzi posibile (deoarece argumentele sunt combinate împreună). Este foarte similar cu modul în care funcționează comandaxargs
, așa că va folosi cât mai multe argumente pe comandă posibil pentru a evita depășirea limitei maxime de argumente pe linie. > Exemplu:$ find /etc/rc* -exec echo Arg: {} "+" Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
Linia de comandă este construită prin adăugarea fiecărui nume de fișier selectat la final.
O singură instanță din
{}
este permisă în cadrul comenzii.
Vezi și:
-
man find
- Utilizarea punct și virgulă (;) vs plus (+) cu execut in find la SO
- Comandă simplă unix, ce este {} și \; pentru la SO
Comentarii
- Există o diferență și una majoră. Consultați user1116056 ' s răspuns
Răspuns
Având în vedere că comanda find devine sub trei fișiere:
fileA fileB fileC
Dacă utilizați -exec
cu un plus (+
) semn,
find . -type f -exec chmod 775 {} +
va fi:
chmod 775 fileA fileB fileC
Linia de comandă este construită prin adăugarea fiecărui nume de fișier potrivit la sfârșit, care este în același mod în care xargs
își construiește liniile de comandă. Numărul total de invocații ale comenzii (chmod
, în acest caz) va fi mult mai mic decât numărul de fișiere potrivite.
Dacă utilizați -exec
cu punct și virgulă (;
),
find . -type f -exec chmod 775 {} \;
va fi:
chmod 775 fileA chmod 775 fileB chmod 775 fileC
Răspuns
Conform man find
:
-exec command {} + Aceasta varianta acțiunii -exec rulează comanda specificată pe fișierele selectate, dar linia de comandă este construită prin adăugarea fiecărui nume de fișier selectat la final; numărul total de invocații ale comenzii va fi mult mai mic decât numărul de fișiere potrivite. Linia de comandă este construită în același mod în care xargs își construiește liniile de comandă. În cadrul comenzii este permisă o singură instanță de „{}”. Comanda este executată în directorul de pornire.
man find(1)
în multe detalii, ușor de găsit de oricine. Nu ' nu fi leneș.man exec
!{} +
. În mod normal, folosesc xargs pentru asta (și adeseafind ... -print0 | xargs -0 ...
)