find parancs használata (frissítve)

kecsi küldte be k, 2008-10-21 16:48 időpontban

Találtam több figyelemre méltó cikket a find használatáról angolul. Egy másik, egy harmadik.
Ezekből szemezgetek:

    Keressünk
  • 20 évnél idősebb állományokat keresünk az aktuális könyvtárban így:
    [geshifilter-code]find ./ -mtime +7300[/geshifilter-code]
  • az utolsó 3 napban módosított állományokat így:
    [geshifilter-code]find . -mtime -3.[/geshifilter-code]
  • az utolsó 3 napban módosított txt állományokat így:
    [geshifilter-code]find . -name '*.txt' -mtime -3[/geshifilter-code]
  • 10000 kbytenál nagyobb állományokat így:
    [geshifilter-code]find . -size +10000k[/geshifilter-code]
  • rc.conf nevű állomány keresése az aktuális könyvtárban
    [geshifilter-code]find . -name "rc.conf" -print [/geshifilter-code]
  • ha megtalálta a find az rc.conf nevű állományt akkor azon végre hajtja a chmod utasítást
    [geshifilter-code]find . -name "rc.conf" -exec chmod o+r '{}' \;[/geshifilter-code]
  • komplex keresés ami kihagyja az eredményből a *.v vagy .*.v nevű állományokat. Egy kis extra magyarázat: -not negálást jelent, -o a logikai OR műveletet, \( a logikai művelet kezdetét jelöli, \) pedig a végét. Egyébként a kihagyott állományok egy verzió kezelő állományai...
    [geshifilter-code]find /usr/src -not \( -name "*,v" -o -name ".*,v" \) '{}' \; -print[/geshifilter-code]
  • keresés a linuxbox szóra a *.html nevű állományokban, állomány név kiiratás találat esetén.
    [geshifilter-code]find . -name "*.html" -exec grep "linuxbox" '{}' \; -print[/geshifilter-code]
  • Keresés az aktuális könyvtárból indulva kis és nagybetű nem figyelembe vételével és kihagyni a .svn nevű könyvtárak tartalmát:
    [geshifilter-code]find . -iname "*old*" -a -not -path "*.svn*" -print[/geshifilter-code]
    Itt igazából a -and -or -not keresési feltételek közti logikai művelet megadás lehetősége a légyeg!
  • Keresés az aktuális könyvtárból indulva, csak 1 könyvtár mélységben, 1 hétnél öregebb könyvtárakat visszaadva, majd egyesével töröli. Közben listázza melyiket törli...
    [geshifilter-code]find . -mindepth 1 -maxdepth 1 -type d -mtime +7 -exec rm -fr '{}' \; -print[/geshifilter-code]
  • Keresés csak a kezdő mount pontban pl / (root)
    [geshifilter-code]find / -mount -name gmetad*[/geshifilter-code] avagy [geshifilter-code]find / -xdev -name gmetad*[/geshifilter-code]
  • Név alapú kizárása állományoknak és könyvtáraknak - tehát ezeket nem töröljük a végén azaz megtartjuk - csak 1 szinten keresés és az eredmény kiírása és törlése.
    [geshifilter-code]find /var/lib/jenkins/jobs/*/builds/*/htmlreports/* ! \( -name 'Results' -o -name 'Report' -o -name 'images' -o -name '*js' -o -name '*html' -o -name '*css' -o -name '*.png' -o -name '*.gif' -o -name '*.jpg' -o -name '*.tap' \) -maxdepth 1 -mindepth 1 -print -exec rm -fr '{}' \;[/geshifilter-code]