Find kasutamine

From ICO wiki
Jump to navigationJump to search

POOOOLIIK!!!!

Sissejuhatus

Find on üks võimsamaid UNIXi utiliite. Tema abil saab otsida teatud tingimustele vastavaid faile kataloogipuust, mis UNIXi puhul sisaldab kuni paarkümmend tuhat faili.

Ärakaranud faili on võimalik üles leida nime, nime osa, omaniku või grupi nime, loabittide, suuruse, failitüübi, loomisaja ning modifitseerimisaja järgi. find-käsku mõne teisega kombineerides on võimalik otsida faile isegi üheainsa sõna järgi, mida see fail sisaldab. Eriti spetsiifilise lahendusena õpetame faili kustutamist temas sisalduva info põhjal.

Failide otsimiseks sobib kasutada programmi Find. Otsimiseks on vaja teada kataloogi, kust otsida ning eritunnust, millega otsingut kitsendada. Tavaline on failide otsimine nime järgi. Näiteks otsime jooksvast kataloogist ja selle alla jäävatest alamkataloogidest faili nimega 'failinimi'

Näited

- 1. Find alus

  • Vaikimisi süntaks on:
 find [path] [expression] 

2. Faili leidmine nime järgi

  • Näiteks soovite leida kõik mp3 failid kasutajate kodu kataloogides. Faile saab leida käsuga:
 find /home -name "*.mp3" 
  • Kui soovite otsida näiteks *.mpg ja *.avi faile, siis kasuta järgmist:
 find /home -name "*.mpg" -o -name "*.avi" 
  • Tõstutundetu otsingud on võimalik saavutada kasutades -iname :
 find /home -iname "*.mpg" -o -iname "*.avi" 

3. Lisades mõned Põhimõtted Sellist tüüpi otsinguid kasutades tuleb liiga palju tulemusi, mistõttu on raske leida, mida te otsisite esiteks. Õnneks saab piirata otsingut, lisades kriteeriume, nagu faili suuruse ja faili muutmise kuupäeva.

  • Leiame Avi failid, mis on suuremad kui 700m. Seda võib teha:
 find /home/-name "*.avi ' -size 700 M 
  • Saab ka leida sama hulga faile, mida muudeti vähem kui 15 päeva tagasi:
 find /home/-name "*.avi '-size 700 M -mtime -15 

4. Lisades mõned meetmed Võimalik on leida Avi-faili, mis on uuem kui 15 päeva. Selle näite puhul liigutame ka faili teise asukohta: /minu/uus/film. Eeldusel, et see kataloog on juba olemas oma süsteemis.

  • Avi failid suuremad kui 700 M ja nooremad kui 15 päeva /minu/uus/film saab teha:
 find /home/-name "*.avi '-size +700 M-mtime -15-exec mv' () '/minu/uus/film/ \; 

Kasutades '()' ja \; (on tühik enne \;). "()" Vastab, et faili ei leitud, kuigi \; lõpetab exec avaldusega.

Faili leidmine nime põhjal

   Olgu meil vaja leida (find) fail, mille nimi (name) on uhuu. Kuna pole teada, mis kataloogis ta võiks asuda, siis alustame otsinguid juurkataloogist (/). Ning lõpuks, kui sellise nimega fail leitakse, siis tuua ekranile (-print) tema täisnimi.
   find / -name uhuu -print
   Failinime genereerimiseks tohib kasutada malli. Taoline käsk kõlaks umbes sedasi:
   find / -name "*uu" -print

Faili otsimine omaniku nime järgi

   on tegelikult imelihtne:
   find /usr/home -user peeter -print
   Mingile kasutajale kuuluvat faili on ikka mõttekam otsida enne kodust kui küla pealt, sest kogu failisüsteemi findiga läbikäiamine võib kulutada tubli pool tundi Sinu ajast.
   Faili otsimiseks grupitunnuse, näiteks bookkeep järgi tuleb anda käsk
   find /usr/home -group bookkeep -print

Faili leidmine loabittide järgi

   toimub käsuga:
   find . -perm 0755 -print
   kusjuures otsitakse faile, mille loabitid käsu chmod tähenduses on täpselt rwxr-xr-x. Punkt find-käsu järel märgib, et otsimist alustatakse samast kataloogist allapoole, kus Sa hetkel asud.

Failide otsimine suuruse järgi

   Selleks, et leida faile, mille mahuks on 50000 baiti (c-char) või enam, tuleb anda käsk:
   find / -type f -size +50000c
   Selles näites tähendab -type f, et tuleb otsida ikka normaalsete failide seast, mitte kataloogide, semaforide ja /dev/-kataloogi peegelduste seast. Sest semaforil pole pikkust. Semafor kas on või teda pole, /dev-kataloogi peegeldatud füüsilise kõvaketta pikkuse mõõtmisel aga võivad olla hoopis naljakad tagajärjed...

Faili leidmine tema küljes rippuvate kellaaegade järgi

   Nagu teada, on UNIXis iga faili küljes kolm kellaaega, loomise või loabittide muutmise aeg (change time -- ctime), viimase avamise aeg (access time -- atime) ning sisu viimase muutmise aeg (modification time -- mtime).
   Nüüd võime anda käsu failide otsimiseks, mille loomisajast on möödunud vähem kui 7 päeva, kuid viimase näppimise ajast rohkem kui 2 päeva:
   find  /  -ctime -7  -atime +2  -print

Faili leidmine temas sisalduva stringi järgi

   find-käsul on operaator nimega -exec {}, millega saab leitud faili kallal mõnda teist UNIXi käsku rakendada. Failis sisalduvat sõna teades tuleb faili otsida käskude find ja grep ristsugutise abil:
   find /usr/doc -type f -exec grep "Uugametsa Kolla" {} \;
   Käsk otsibib (find) kataloogist /usr/doc allapoole läbi kõik failid (-type f) ning täidab igaühe ({}) kallal neist failidest käsu grep, mis omakorda otsib failist stringi "Uugametsa Kolla".
   Äraspidi kaldkriipsud selles näites on mõeldud C-Shelli (csh) ja Turbo-C-Shelli (tcsh) kasutajatele, et varjestada shelli eest metamärki (semikoolonit). Semikoolon ise märgib -exec-operaatori lõppu.

Käsu find kasutamine tsensoritöös

   on niisama lihtne kui geniaalne. Käsurida
   find / -type f -exec grep "pornograafia" {} \; -exec rm -i {} \;
   otsib kogu failipuu läbi, et kas ehk sisaldub mõnes failis sõna pornograafia. Ning kui sisaldub, siis kustutab selle faili maha kah kohe. Küll jah nii viisakas siiski on, et kustutab (rm) alles peale loaküsimist (-i).
   Huhh, irmus jõuline asi see find-käsk... 

Veelgi keerulisemate otsimiskonstruktsioonide kohta saab teavet käsuga man find. [[1]Link]

Lingid

Find1ja /Find 2 Kuidas leida faile FF FFF veel / ja veel