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

  • Näen. Olen myös lukenut ', että -delete -kytkimen avulla ennen -name poistetaan määritetty tiedostopuu , joten luulen, että minun on oltava varovainen.
  • Viimeisimmissä find -sovelluksissa voit käyttää -exec rm {} + -toimintoa kaikkien vastaavien poistamiseen. tiedostot, joissa on yksi komento rm.
  • .DS_Store ei ' t sisältää lainkaan erikoismerkkejä, joten lainaukset eivät ole tarpeellisia eivätkä muuta mitään tässä tapauksessa.
  • Pohjimmiltaan vain välilyönnit (välilyönnit, välilehdet, ehkä muut) ovat ainoa asia, joka aiheuttaa lainaamattomien merkkijonojen tulkitsemisen kaksi erillistä komentoriviargumenttia, mutta se, että ' ei ole kaikki, mitä sinun on valitettava, kun päätät tarjouksen tekemisestä. Sinun on huolehdittava kaikista kuoren metahahmoista, kuten ; tai | tai > tai < ja ” ja monia muita, joilla on erityinen merkitys kuorelle, ellei niitä ole mainittu.
  • @MarcoMarsala xargs hoitaa rajoitetun kokoisen argumenttiluettelon ongelman läpinäkyvästi hajottamalla sen useiksi komennon kutsuksi.

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.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *