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

  • Jest to opisane w man find(1) szczegółowo i łatwo je znaleźć. Nie ' nie bądź leniwy.
  • Dzięki drogi Miroslav, szukałem w man exec!
  • Ach, nigdy wcześniej nie spotkałem się z użyciem {} +. Zwykle używam do tego xargs (i często find ... -print0 | xargs -0 ...)

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 polecenia xargs, 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:

Komentarze

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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *