Jeg vil vite betydningen av {} +
i exec
kommando, og hva er forskjellen mellom {} +
og {} \;
. For å være nøyaktig, hva er forskjellen mellom disse to:
find . -type f -exec chmod 775 {} + find . -type f -exec chmod 775 {} \;
Kommentarer
Svar
Å bruke ;
(semikolon) eller +
(plusstegn) er obligatorisk for å avslutte skallkommandoene påkalt av -exec
/ execdir
.
Forskjellen mellom ;
(semikolon) eller +
(plusstegn) er hvordan argumentene overføres til finn «s -exec
/ -execdir
parameter. For eksempel:
-
å bruke
;
vil utføre 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
blir tatt som argumenter for kommandoen.Strengen
{}
erstattes av gjeldende filnavn behandles. -
ved hjelp av
+
utfører minst mulig kommandoer (ettersom argumentene kombineres). Det ligner veldig på hvordanxargs
-kommandoen fungerer, så den vil bruke så mange argumenter per kommando som mulig for å unngå å overskride maksimumsgrensen for argumenter per linje.Eksempel:
$ find /etc/rc* -exec echo Arg: {} "+" Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
Kommandolinjen er bygd ved å legge til hvert valgte filnavn på slutten.
Bare en forekomst av
{}
er tillatt i kommandoen.
Se også:
-
man find
- Bruk av semikolon (;) vs pluss (+) med exec i finn ved SO
- Enkel unix-kommando, hva er {} og \; for på SO
Kommentarer
- Det er en forskjell og en stor forskjell. Se bruker1116056 ' s svar
Svar
Gitt at kommandofunn kommer under tre filer:
fileA fileB fileC
Hvis du bruker -exec
med et pluss (+
) tegn,
find . -type f -exec chmod 775 {} +
det blir:
chmod 775 fileA fileB fileC
Kommandolinjen er bygd ved å legge til hvert samsvarende filnavn på slutten, som er på samme måte som xargs
bygger kommandolinjene. Det totale antallet påkallinger av kommandoen (chmod
, i dette tilfellet) vil være mye mindre enn antall samsvarende filer.
Hvis du bruker -exec
med semikolon (;
),
find . -type f -exec chmod 775 {} \;
det blir:
chmod 775 fileA chmod 775 fileB chmod 775 fileC
Svar
I henhold til man find
:
-exec-kommando {} + Dette variant av -exec-handlingen kjører den spesifiserte kommandoen på de valgte filene, men kommandolinjen bygges ved å legge til hvert valgte filnavn på slutten; det totale antallet påkallinger av kommandoen vil være mye mindre enn antall samsvarende filer. Kommandolinjen er bygget på omtrent samme måte som xargs bygger kommandolinjene. Bare en forekomst av ‘{}’ er tillatt i kommandoen. Kommandoen utføres i startkatalogen.
man find(1)
i detalj, lett å finne av alle. Ikke ' t være lat.man exec
!{} +
bruken før. Jeg bruker normalt xargs for det (og oftefind ... -print0 | xargs -0 ...
)