Find

De la Wikipedia, enciclopedia liberă
Salt la: Navigare, căutare

În sistemele de operare de tip UNIX, comanda find permite căutarea unui fișier prin unul sau mai multe directoare. Căutarea este bazată pe o serie de criterii specificate de utilizator. Posibile criterii includ un pattern sau un interval de timp când fișierul a fost creat sau modificat. Rezultatul comenzii este o listă de nume de fișiere care respectă criteriile specificate.

Comanda înrudită locate utilizează o bază de date de fișiere indexate. Baza de date este creată cu ajutorul comenzii find și este actualizată la intervale regulate, în mod tipic cu un job cron. Aceasta oferă o metodă de căutare mai rapidă, însă nu are acuratețea comenzii find.


Syntaxă[modificare | modificare sursă]

find [-H] [-L] [-P] [path...] [expression]

Opțiunile -H, -L și -P controlează modul în care sunt tratate linkurile simbolice. Implicit, linkurile simbolice nu sunt urmate (-P). Urmarea linkurilor poate fi specificată explicit folosind opțiunea -L, în timp ce -H va urmări linkurile simbolice numai în timpul procesării argumentelor din linia de comandă.

Dacă nu este specificată, calea (path) de căutare este presupusă ca fiind directorul curent. Calea apare întotdeauna înaintea expresiei. Expresiile pot să cuprindă wildcards. Elementele expresiilor sunt separate prin spații goale, și sunt evaluate de la stânga la dreapta. Pot să conțină elemente logice precum AND (-a) și OR (-o).

Comanda find după cum este implementată în GNU findutils are un număr adițional de caracteristici suplimentare care nu sunt specificate în POSIX.


Exemple[modificare | modificare sursă]

Din directorul curent[modificare | modificare sursă]

find . -name 'm*'

Comanda caută fișiere care încep cu litera m în directorul curent (reprezentat de . ) și sub acesta. În versiunile noi, directorul poate fi omis, implicit căutarea are loc în directorul curent.

Numai fișiere[modificare | modificare sursă]

find . -name "m*" -type f

Căutarea este limitată numai la fișiere regulate, directoarele, fișierele speciale, linkurile simbolice etc. sunt excluse. Pentru directoare se folosește -type d, pentru linkuri -tipe l, pentru pipe -type p, pentru socket -type s etc.

Schimbarea acțiunii implicite[modificare | modificare sursă]

Acțiunea implicită pentru fiecare fișier găsit este de a tipări numele fișierului. Date suplimentare despre fișier pot fi tipărite cu ajutorul opțiunii -ls:

find . -name "m*" -type f -ls

Ca rezultat, pentru fiecare fișier găsit se tipăresc cum ar fi dimensiunea fișierului, data când a fost creat sau modificat etc.

Alt mod de a schimba acțiunea implicită este cu ajutorul opțiunii -exec:

find . -name "m*" -type f -exec chmod 644 {} \;

Orice comandă shell poate fi folosită. În exemplul de mai sus schimbăm permisiile fișierelor care încep cu litera m.

Căutare în toate directoarele[modificare | modificare sursă]

find / -type f -name "myfile"

Căutarea are loc în toate directoarele din sistemul de fișiere (/).

Căutare într-un director specificat[modificare | modificare sursă]

find /home/utilizator -type f -name "myfile"

În acest caz, căutarea este limitată la directorul /home/utilizator.

Ignorarea erorilor[modificare | modificare sursă]

find / -name "myfile" -type f 2>/dev/null

Metoda clasică în UNIX de a scăpa de erorile tipărite pe ecran în timpul rulării unei comenzi este de a redirecta stderr către /dev/null. O versiune alternativă este de a scăpa de erori folosind comanda grep

find . -name "myfile" |& grep -v "Permission denied"

Găsește orice fișier cu un nume diferit[modificare | modificare sursă]

find . \( -name "*jsp" -o -name "*java" \) -type f -ls

Informație extinsă este tipărită pentru fiecare fișier al cărui nume se termină în jsp sau java. Argumentul -o este operatorul logic OR. Parantezele sunt necesare pentru a delimita expresia. În multe interpretoare shell parantezele sunt considerate caractere speciale și vor fi interpretate. De aceea, este necesară bara \ înaintea parantezelor.

Caută un string[modificare | modificare sursă]

find /tmp -exec grep "search string" '{}' /dev/null \; 

/dev/null este utilizat pentru tipărirea numelui fișierului înaintea textului găsit. Fără el, numele fișierului nu ar fi tipărit. Un exemplu echivalent ar fi folosirea opțiunii -H a utilitarului {{grep]]:

find /tmp -exec grep -H "search string" '{}' \; 

De exemplu, pentru căutarea stringului ERROR în toate fișierele xml se poate folosi

find . -name "*.xml" -exec grep "ERROR" '{}' \; 

Caută fișierele unui utilizator specific[modificare | modificare sursă]

În acest caz se folosește opțiunea -user

find . -user <userid>

Căutarea insensibilă la majuscule[modificare | modificare sursă]

find . -iname "m*"

Sunt tipărite toate fișierele care încep cu m sau M.

Căutare după dimensiunea fișierului[modificare | modificare sursă]

find . -size +100k -a -size -500k

Acesta este un exemplu de căutare a tuturor fișierelor cu o dimensiune între 100KB și 500KB.


Legături externe[modificare | modificare sursă]


 v  d  m  Programe în linia de comandă pentru Unix (mai multe)
Management de fișiere: cat | cd | chmod | chown | chgrp | cksum | cmp | cp | du | df | file | fsck | ln | ls | lsof | mkdir | mount | mv | pwd | rm | rmdir | split | touch
Management de procese: at | chroot | cron | exit | kill | killall | nice | pgrep | pidof | pkill | ps | pstree | sleep | time | top | wait
Management utilizator/mediu: env | finger | id | mesg | passwd | su | sudo | uname | uptime | w | wall | who | whoami | write
Procesare text: awk | comm | cut | ed | ex | fmt | head | iconv | join | less | more | paste | sed | sort | tac | tail | tr | uniq | wc | xargs
Programare Shell: basename | echo | expr | false | printf | test | true | unset Imprimare:
lp
Communicații:
inetd | netstat | ping | rlogin | traceroute
Căutare:
find | grep | strings
Diverse:
banner | bc | cal | dd | man | size | yes