Jeg vil gerne vide betydningen af {} +
i exec
kommando, og hvad er forskellen mellem {} +
og {} \;
. For at være præcis, hvad er forskellen mellem disse to:
find . -type f -exec chmod 775 {} + find . -type f -exec chmod 775 {} \;
Kommentarer
Svar
Brug af ;
(semikolon) eller +
(plustegn) er obligatorisk for at afslutte shell-kommandoer påkrævet af -exec
/ execdir
.
Forskellen mellem ;
(semikolon) eller +
(plustegn) er hvordan argumenterne sendes til find “s -exec
/ -execdir
For eksempel:
-
ved hjælp af
;
udføres flere kommandoer (separat for hvert argument),Eksempel:
$ find /etc/rc* -exec echo Arg: {} ";" Arg: /etc/rc.common Arg: /etc/rc.common~previous Arg: /etc/rc.local Arg: /etc/rc.netboot
Alle følgende argumenter til
find
betragtes som argumenter for kommandoen.Strengen
{}
erstattes af det aktuelle filnavn e behandles. -
ved hjælp af
+
udfører de mindst mulige kommandoer (da argumenterne kombineres). Det ligner meget, hvordanxargs
-kommandoen fungerer, så den bruger så mange argumenter pr. Kommando som muligt for at undgå at overskride den maksimale grænse for argumenter pr. Linje.Eksempel:
$ find /etc/rc* -exec echo Arg: {} "+" Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
Kommandolinjen er bygget ved at tilføje hvert valgte filnavn i slutningen.
Kun en forekomst af
{}
er tilladt inden for kommandoen.
Se også:
-
man find
- Brug af semikolon (;) vs plus (+) med exec i find ved SO
- Enkel unix-kommando, hvad er {} og \; for ved SO
Kommentarer
- Der er en forskel og en stor forskel. Se bruger1116056 ' s svar
Svar
I betragtning af at kommandosøgning kommer under tre filer:
fileA fileB fileC
Hvis du bruger -exec
med et plus (+
) tegn,
find . -type f -exec chmod 775 {} +
det bliver:
chmod 775 fileA fileB fileC
Kommandolinjen er bygget ved at tilføje hvert matchet filnavn i slutningen, hvilket er på samme måde som xargs
bygger sine kommandolinjer. Det samlede antal indkaldelser af kommandoen (chmod
, i dette tilfælde) vil være meget mindre end antallet af matchede filer.
Hvis du bruger -exec
med et semikolon (;
),
find . -type f -exec chmod 775 {} \;
det bliver:
chmod 775 fileA chmod 775 fileB chmod 775 fileC
Svar
I henhold til man find
:
-exec-kommando {} + Dette variant af handlingen -exec kører den angivne kommando på de valgte filer, men kommandolinjen er bygget ved at tilføje hvert valgte filnavn i slutningen; det samlede antal indkaldelser af kommandoen vil være meget mindre end antallet af matchede filer. Kommandolinjen er bygget på samme måde som xargs bygger sine kommandolinjer. Kun en forekomst af {} er tilladt i kommandoen. Kommandoen udføres i startmappen.
man find(1)
meget detaljeret, let at finde af alle. Don ' t være doven.man exec
!{} +
brugen før. Jeg bruger normalt xargs til det (og oftefind ... -print0 | xargs -0 ...
)