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

  • Det er beskrevet i man find(1) i detalj, lett å finne av alle. Ikke ' t være lat.
  • Takk kjære Miroslav, jeg søkte i man exec!
  • Ah, jeg hadde aldri kommet over {} + bruken før. Jeg bruker normalt xargs for det (og ofte find ... -print0 | xargs -0 ...)

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å hvordan xargs -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å:

Kommentarer

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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *