Find

Î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ă

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

Din directorul curent

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

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

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

find / -type f -name "myfile"

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

Căutare într-un director specificat

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

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

Ignorarea erorilor

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

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

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

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

find . -user <userid>

Căutarea insensibilă la majuscule

find . -iname "m*"

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

Căutare după dimensiunea fișierului

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

  • en Pagina de manual
  • en find Commands & Utilities Reference, The Single UNIX® Specification, Issue 7 from The Open Group
  • en A story on the origins of the Unix find command.
  • en GNU Findutils - Comes with the xargs and locate commands.
  • en Official webpage for GNU find
  • en Softpanorama find tutorial
  • en Exercises "Find" Arhivat în , la Wayback Machine.
  • en "Find helper" - unix "find" wizard Arhivat în , la Wayback Machine.
  • en Guide to Linux Find Command Mastery
  • en Top 'find' commands - interesting usage Arhivat în , la Wayback Machine.
  • en Ask Ars: how do I use the find command in a pipeline?, iunie 2011, Ryan Paul, Ars Technica
  • Utilizarea comenzii find în Linux Arhivat în , la Wayback Machine.


 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