Haluan tietää merkityksen {} +
merkityksestä exec
-komento ja mikä on ero {} +
ja {} \;
välillä. Tarkemmin sanottuna, mikä on ero näiden kahden välillä:
find . -type f -exec chmod 775 {} + find . -type f -exec chmod 775 {} \;
kommentit
Vastaa
;
(puolipiste) tai +
(plusmerkki) käyttäminen on pakollista, jotta lopetetaan -exec
/ execdir
.
Erotus ;
(puolipiste) tai +
(plusmerkki) on se, kuinka argumentit välitetään etsimään ”s -exec
/ -execdir
Esimerkki:
-
;
-toiminnon avulla suoritetaan useita komentoja (erikseen jokaiselle argumentille),Esimerkki:
$ find /etc/rc* -exec echo Arg: {} ";" Arg: /etc/rc.common Arg: /etc/rc.common~previous Arg: /etc/rc.local Arg: /etc/rc.netboot
Kaikki seuraavat argumentit
find
katsotaan argumenteiksi komennolle.Merkkijono
{}
korvataan nykyisellä tiedoston nimellä Käsitellään. -
käyttämällä
+
suorittaa vähiten mahdollisia komentoja (koska argumentit yhdistetään). Se on hyvin samanlainen kuinxargs
-komento, joten se käyttää mahdollisimman monta argumenttia komentoa kohden välttääkseen riviarvojen enimmäismäärän ylittämisen.Esimerkki:
$ find /etc/rc* -exec echo Arg: {} "+" Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
Komentorivi rakennetaan liittämällä jokainen valittu tiedostonimi loppuun.
Vain yksi
{}
-esiintymä on sallittu komennossa.
Katso myös:
-
man find
- Puolipisteen (;) vs plus (+) käyttäminen exec-haulla etsinnässä SO: ssa
- Yksinkertainen unix-komento, mikä on {} ja \; varten SO: ssa
Kommentit
- Eroa ja suurta on . Katso user1116056 ' s vastaus
vastaus
Koska komentohaku saa alle kolme tiedostoa:
fileA fileB fileC
Jos käytät -exec
plusmerkillä (+
) merkki,
find . -type f -exec chmod 775 {} +
se tulee olemaan:
chmod 775 fileA fileB fileC
Komentorivi rakennetaan liittämällä kukin vastaava tiedostonimi loppuun, mikä on samalla tavalla kuin xargs
rakentaa komentorivit. Komennon kutsujen kokonaismäärä (tässä tapauksessa chmod
) on paljon pienempi kuin vastaavien tiedostojen määrä.
Jos käytät -exec
puolipisteellä (;
),
find . -type f -exec chmod 775 {} \;
se tulee olemaan:
chmod 775 fileA chmod 775 fileB chmod 775 fileC
vastaus
Kuten man find
:
-exec -komento {} + Tämä -exec -toiminnon variantti suorittaa määritetyn komennon valituissa tiedostoissa, mutta komentorivi rakennetaan liittämällä jokainen valittu tiedostonimi loppuun; komennon kutsujen kokonaismäärä on paljon pienempi kuin vastaavien tiedostojen määrä. Komentorivi on rakennettu samalla tavalla kuin xargs rakentaa komentorivit. Komennossa sallitaan vain yksi ”{}” – esiintymä. Komento suoritetaan aloitushakemistossa.
man find(1)
-kohdassa yksityiskohtaisesti, helposti kaikkien löydettävissä. Älä ' ole laiska.man exec
!{} +
-käyttöön. Käytän normaalisti siihen xargsia (ja useinfind ... -print0 | xargs -0 ...
)