Megpróbálom megérteni ezek közötti különbséget két parancs:

sudo find / -name .DS_Store -delete 

és

sudo find / -name ".DS_Store" -exec rm {} \; 

Észrevettem, hogy a -exec ... {} módszert részesítik előnyben. Miért? Melyik a biztonságosabb / gyorsabb / jobb? Mindkettőt használtam a Macbook on, és úgy tűnik, hogy minden jól működik.

Válasz

-delete jobban fog teljesíteni, mert nem kell mindegyikhez külső folyamatot létrehoznia és minden egyező fájlt.

Lehetséges, hogy gyakran látja a -exec rm {} \; fájlt, mert a -delete nem létezik az find összes verziója. Most nem tudom ellenőrizni, de biztos vagyok benne, hogy enélkül find -t használtam.

B az összes módszernek “biztonságosnak” kell lennie.

SZERKESZTÉS a @doitmyway kommentjeinként: győződjön meg róla, hogy megfelel a néven és majd törölje, ne fordítva (törölje, majd egyezzen). Ellenkező esetben minden fájl törlődik, akár egyezik, akár nem . Vagyis, NE NE tegye ezt: find / -delete -name .DS_Store.

Általános módszer a külső folyamatok létrehozásának elkerülésére az egyes illesztett fájlok esetében:

find / -name .DS_Store -print0 | xargs -0 rm 

(de vegye figyelembe, hogy itt is van hordozhatósági probléma: a megtalálás nem minden verziójában van -print0!)

Megjegyzések

  • Értem. ' azt is olvastam, hogy a -delete kapcsoló használatával a -name törlés előtt a megadott fájlfa , úgyhogy azt hiszem, óvatosnak kell lennem.
  • A legutóbbi find fájlokban az -exec rm {} + paranccsal eltávolíthatja az összes egyezést. fájlok egyetlen rm paranccsal.
  • .DS_Store nem ' t tartalmazhat speciális karaktereket, ezért az idézőjelek feleslegesek, és ebben az esetben semmit sem változtatnak.
  • Alapvetően csak a szóköz (szóközök, tabulátorok, esetleg mások) az egyetlen dolog, ami miatt egy idézetlen karakterláncot úgy értelmeznek, hogy két különálló parancssori argumentum, de ez az ' nem minden, amit sajnálnia kell, amikor eldönti, hogy idézi-e vagy sem. Aggódnia kell minden shell metakarakter miatt, például ; vagy | vagy > vagy < és “és még sokan mások, amelyeknek külön jelentése van a héjnak, hacsak nem idézzük őket.
  • @MarcoMarsala xargs átláthatóan gondoskodik a korlátozott méretű argumentumlista problémáról, a parancs többszörös meghívására bontva.

Válasz

Ha feltételezzük, hogy .DS_Store fájlokat képvisel, és nem könyvtárakat, akkor ennek a leghordozhatóbb, mégis gyors módja lenne:

sudo find / -name .DS_Store -exec rm {} + 

Az egyetlen kockázat az, hogy a sudo nem elérhető, de manapság elég alacsony.

A -delete opció, amely a GNU keresésére szolgál, és sok más find megvalósításban még mindig nem szabványos, ezért nem mindig érhető el.

A parancs lezárása + be Az \; helyett a exec záradékot úgy optimalizálja, hogy nem futtatja a rm parancsot minden .DS_Store, amely jelen van a fájlrendszeren.

Válasz

Ilyen gép esetén mivel a MacBook nem fog nagy különbséget találni a két parancs teljesítményében. Ha azonban megnézzük az -exec verziót, láthatunk egy apró különbséget:

sudo find / -iname ".file-to-delete" -exec rm {} \; 

Ez azt jelenti, hogy megtalálja az összes nevű fájlt .file -törölni”. Ez a keresés azonban nem kívánt hamis pozitív eredményeket hozhat. Ha valamit csinálsz a sudo-val, akkor egy kicsit óvatosabbnak kell lenned. Az -exec rm {} használatának előnye, hogy argumentumokat adhat át az rm-nek így:

sudo find / -iname "*~" -exec rm -i {} \; 

Ebben a példában el akarom távolítani azokat a biztonsági mentési fájlokat, amelyek emacs gyárt. Ez a tilde azonban lehet olyan homályos fájlban, amelyről nem tudok, és fontos lehet. Plusz megerősíteni szeretném a törlést. Tehát az “-i” opciót tettem az rm parancsra. Ez interaktív törlést ad .

Továbbá finomíthatja az rm használatát a könyvtárak és a fájlok törléséhez:

find /usr/local/share/ -iname "useless" -exec rm -r {} \; 

Röviden: az -exec megadja valamivel jobban szabályozhatja a tényleges parancsot, amely eltávolítja a talált elemet. Előnye, hogy egy eszközzel megtalálja a fájlokat, másik eszközzel pedig eltávolítja őket.A find segédprogram nem minden verziójában található a -delete opció. Ezért jobb, ha minden eszközt a megfelelő feladatához használ. Ez az unix filozófia – egy eszköz, egy munka, használja őket együtt arra, amit meg kell tennie.

Megjegyzések

  • Lásd még: -ok rm {} \; az -exec rm {} \; helyett az interaktív megerősítéshez.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük