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
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, jakxargs
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é:
-
man find
- Používání středníku (;) vs plus (+) s exec in find v SO
- Jednoduchý příkaz unixu, jaké jsou {} a \; pro v SO
Komentáře
- Existuje rozdíl a hlavní rozdíl. Viz user1116056 ' s odpověď
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.
man find(1)
podrobněji, snadno kdokoli. Nebuďte líní '.man exec
!{} +
jsem se nikdy předtím nesetkal. Normálně k tomu používám xargs (a častofind ... -print0 | xargs -0 ...
)