Î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.
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.
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.
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.
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.
find / -type f -name "myfile"
Căutarea are loc în toate directoarele din sistemul de fișiere (/).
find /home/utilizator -type f -name "myfile"
În acest caz, căutarea este limitată la directorul /home/utilizator.
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"
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.
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" '{}' \;
În acest caz se folosește opțiunea -user
find . -user <userid>
find . -iname "m*"
Sunt tipărite toate fișierele care încep cu m sau M.
find . -size +100k -a -size -500k
Acesta este un exemplu de căutare a tuturor fișierelor cu o dimensiune între 100KB și 500KB.
Unix (mai multe) | Programe în linia de comandă pentru|||
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 |