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

  • Det er beskrevet i man find(1) meget detaljeret, let at finde af alle. Don ' t være doven.
  • Tak, kære Miroslav, jeg søgte i man exec!
  • Ah, jeg havde aldrig stødt på {} + brugen før. Jeg bruger normalt xargs til det (og ofte find ... -print0 | xargs -0 ...)

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

Kommentarer

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.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *