Yritän ymmärtää näiden välistä eroa kaksi komentoa:
sudo find / -name .DS_Store -delete
ja
sudo find / -name ".DS_Store" -exec rm {} \;
Huomasin, että -exec ... {}
-menetelmä on suositeltava. Miksi? Kumpi on turvallisempi / nopeampi / parempi? Olen käyttänyt molempia Macbook iin ja kaikki näyttää toimivan hyvin.
vastaus
-delete
toimii paremmin, koska sen ei tarvitse synnyttää kutakin ulkoista prosessia ja kaikki vastaavat tiedostot.
On mahdollista, että saatat nähdä usein suosituksia -exec rm {} \;
, koska -delete
ei ole olemassa kaikki version find
versiot. En voi tarkistaa juuri nyt, mutta olen melko varma, että olen käyttänyt find
ilman sitä.
B Muiden menetelmien tulisi olla ”turvallisia”.
MUOKKAA kutakin @doitmywayn kommenttia kohti: varmista, että sovitat yhteen nimessä ja sitten poista, ei päinvastoin (poista, sitten täsmää). Muuten kaikki tiedostot poistetaan, sopivatko ne yhteen . Eli, ÄLÄ tee tätä: find / -delete -name .DS_Store
.
Yleinen tapa välttää jokaisen haetun tiedoston ulkoisen prosessin kuteminen on:
find / -name .DS_Store -print0 | xargs -0 rm
(mutta huomaa, että myös tässä on siirrettävyysongelma: kaikilla löydön versioilla ei ole -print0
!)
Kommentteja
Vastaa
Olettaen, että .DS_Store
edustaa tiedostoja eikä hakemistoja, kannettavin edelleen nopein tapa tehdä se olisi:
sudo find / -name .DS_Store -exec rm {} +
Ainoa riski on, että sudo
ei ole käytettävissä, mutta se on nykyään melko pieni.
-delete
-vaihtoehto, jota käytetään vaatimaan GNU-hakua, ja se on edelleen epätavallinen monissa muissa find
-toteutuksissa, joten se ei ole aina käytettävissä.
Komennon lopetus +
sisään \;
-standardin sijaan optimoi exec
-lausekkeen olemalla suorittamatta komentoa rm
kullekin ja jokainen tiedostojärjestelmässä oleva .DS_Store
.
Vastaa
Tällaiselle koneelle MacBookissasi et löydä paljon eroa kahden komennon välillä. Jos tarkastelet -exec-versiota, näet kuitenkin pienen eron:
sudo find / -iname ".file-to-delete" -exec rm {} \;
Tämä tarkoittaa, että löydät kaikki ne tiedostot, joiden nimi on .file -poistaa ”. Tämä haku saattaa kuitenkin palauttaa joitain ei-toivottuja vääriä positiivisia tuloksia. Kun teet jotain sudon kanssa, sinun on oltava hieman varovaisempi. -Exec rm {} -sovelluksen etuna on, että voit välittää argumentteja rm: lle näin:
sudo find / -iname "*~" -exec rm -i {} \;
Tässä esimerkissä haluan poistaa varmuuskopiotiedostot, jotka emacs tekee. Tuo tilde voi kuitenkin olla jossakin hämärässä tiedostossa, josta en tiedä ja joka voi olla tärkeä. Lisäksi haluan vahvistaa poiston. Joten laitoin vaihtoehdon ”-i” rm-komentoon. Tämä antaa minulle interaktiivisen poiston .
Voit myös tarkentaa rm: n käyttöä hakemistojen ja tiedostojen poistamiseksi:
find /usr/local/share/ -iname "useless" -exec rm -r {} \;
Lyhyesti sanottuna -exec antaa hallitset hieman enemmän todellista komentoa, joka poistaa löydetyn kohteen. Etuna on, että käytät tiedostoja etsimällä yhtä työkalua ja poistaaksesi ne toisesta työkalusta.Eikä kaikissa hakutyökalun versioissa ole -delete-vaihtoehto. Joten parempi käyttää kutakin työkalua oikeaan työhönsä. Tämä on unix-filosofia – yksi työkalu, yksi työ, käytä niitä yhdessä, kun haluat tehdä.
Kommentit
- Katso myös
-ok rm {} \;
vuorovaikutteisen vahvistuksen-exec rm {} \;
-tilan sijasta.
-delete
-kytkimen avulla ennen-name
poistetaan määritetty tiedostopuu , joten luulen, että minun on oltava varovainen.find
-sovelluksissa voit käyttää-exec rm {} +
-toimintoa kaikkien vastaavien poistamiseen. tiedostot, joissa on yksi komentorm
..DS_Store
ei ' t sisältää lainkaan erikoismerkkejä, joten lainaukset eivät ole tarpeellisia eivätkä muuta mitään tässä tapauksessa.;
tai|
tai>
tai<
ja ” ja monia muita, joilla on erityinen merkitys kuorelle, ellei niitä ole mainittu.xargs
hoitaa rajoitetun kokoisen argumenttiluettelon ongelman läpinäkyvästi hajottamalla sen useiksi komennon kutsuksi.