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

  • Este descris în man find(1) în multe detalii, ușor de găsit de oricine. Nu ' nu fi leneș.
  • Mulțumesc dragă Miroslav, am căutat în man exec!
  • Ah, nu mai întâlnisem niciodată utilizarea {} +. În mod normal, folosesc xargs pentru asta (și adesea find ... -print0 | xargs -0 ...)

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ă comanda xargs, 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:

Comentarii

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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *