Chci znát význam {} + v exec a jaký je rozdíl mezi {} + a {} \;. Přesně řečeno, jaký je rozdíl mezi těmito dvěma způsoby:

find . -type f -exec chmod 775 {} + find . -type f -exec chmod 775 {} \; 

Komentáře

  • Je to popsáno in man find(1) podrobněji, snadno kdokoli. Nebuďte líní '.
  • Díky drahý Miroslavi, hledal jsem v man exec!
  • Ah, s používáním {} + jsem se nikdy předtím nesetkal. Normálně k tomu používám xargs (a často find ... -print0 | xargs -0 ...)

Answer

Použití ; (středník) nebo + (znaménko plus) je povinné k ukončení příkazů prostředí vyvolaných -exec / execdir.

Rozdíl mezi ; (středníkem) nebo + (znaménko plus) je způsob předávání argumentů do find „s -exec / -execdir parametr: Například:

  • pomocí ; provede více příkazů (zvlášť pro každý argument),

    Příklad:

    $ find /etc/rc* -exec echo Arg: {} ";" Arg: /etc/rc.common Arg: /etc/rc.common~previous Arg: /etc/rc.local Arg: /etc/rc.netboot 

    Všechny následující argumenty find jsou považovány za argumenty příkazu.

    Řetězec {} je nahrazen aktuálním názvem souboru e zpracováváno.

  • pomocí + provede nejméně možných příkazů (protože argumenty jsou kombinovány dohromady). Je to velmi podobné tomu, jak xargs příkaz funguje, takže bude používat co nejvíce argumentů na příkaz, aby nedošlo k překročení maximálního limitu argumentů na řádek.

    Příklad:

    $ find /etc/rc* -exec echo Arg: {} "+" Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot 

    Příkazový řádek je vytvořen připojením každého vybraného názvu souboru na konec.

    V příkazu je povolena pouze jedna instance {}.

Viz také:

Komentáře

Odpověď

Vzhledem k tomu, že příkaz find dostane pod tři soubory:

fileA fileB fileC 

Pokud použijete -exec s plusem (+) sign,

find . -type f -exec chmod 775 {} + 

to bude:

chmod 775 fileA fileB fileC 

Příkazový řádek je vytvořen připojením každého shodného názvu souboru na konec, což je stejným způsobem, jakým xargs vytváří jeho příkazové řádky. Celkový počet vyvolání příkazu (v tomto případě chmod) bude mnohem menší než počet spárovaných souborů.

Pokud používáte -exec se středníkem (;),

find . -type f -exec chmod 775 {} \; 

to bude:

chmod 775 fileA chmod 775 fileB chmod 775 fileC 

odpověď

Podle man find:

-exec příkaz {} + This varianta akce -exec spustí zadaný příkaz na vybraných souborech, ale příkazový řádek je vytvořen připojením každého vybraného názvu souboru na konci; celkový počet vyvolání příkazu bude mnohem menší než počet spárovaných souborů. Příkazový řádek je postaven stejným způsobem, jakým jeho příkazové řádky vytváří xargs. V příkazu je povolena pouze jedna instance znaku „{}. Příkaz se provádí ve výchozím adresáři.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *