Găsiți fișiere și directoare pe Linux cu comanda find | Opensource.com

indiferent de cât de organizat mă hotărăsc să fiu, se pare că există întotdeauna momente când pur și simplu nu pot localiza un fișier. Uneori este pentru că nu-mi amintesc numele fișierului în primul rând. Alteori, știu numele, dar nu-mi amintesc unde am decis să-l salvez. Există chiar și momente când am nevoie de un fișier pe care nu l-am creat în primul rând. Indiferent de problema, totuși, știu că pe un sistem POSIX, am întotdeauna comanda find.

instalarea find

comanda find este definită de specificația POSIX, care creează standardul deschis prin care sunt măsurate sistemele POSIX (inclusiv Linux, BSD și macOS). Pur și simplu, aveți deja instalat find atâta timp cât rulați Linux, BSD sau macOS.

cu toate acestea, nu toate comenzile find sunt exact la fel. Comanda GNU find, de exemplu, are caracteristici pe care comanda BSD sau Busybox sau Solaris find din pachetul findutils, deoarece este ușor disponibil și destul de popular. Majoritatea comenzilor demonstrate în acest articol funcționează cu alte implementări de find, dar dacă încercați o comandă pe o altă platformă decât Linux și obțineți rezultate neașteptate, încercați să descărcați și să instalați versiunea GNU.

găsiți un fișier după nume

puteți localiza un fișier după numele său de fișier furnizând numele complet al fișierului sau părți ale numelui fișierului folosind expresii regulate. Comanda find necesită calea către directorul în care doriți să căutați, opțiuni pentru a specifica ce atribut căutați (de exemplu, –name pentru un nume de fișier sensibil la majuscule) și apoi șirul de căutare. În mod implicit, șirul dvs. de căutare este tratat literal: comanda find caută un nume de fișier care este exact șirul pe care îl introduceți între ghilimele, cu excepția cazului în care utilizați sintaxa expresiei regulate.

să presupunem că directorul Documente conține patru fișiere: Foo, foo, foobar.txt, și foo.xml. Iată o căutare literală a unui fișier cu numele “foo”:

$ find ~ -name "foo"
/home/tux/Documents/examples/foo

puteți extinde căutarea făcând-o insensibilă la majuscule cu opțiunea -iname :

$ find ~ -iname "foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

metacaractere

puteți utiliza caractere wildcard shell de bază pentru a extinde căutarea. De exemplu, asteriscul (*) reprezintă orice număr de caractere:

$ find ~ -iname "foo*"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

un semn de întrebare (?) reprezintă un singur caracter:

$ find ~ -iname "foo*.???"
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

aceasta nu este sintaxa expresiei regulate, deci punctul (.) reprezintă un punct literal în acest exemplu.

expresii regulate

de asemenea, puteți utiliza expresii regulate. Ca și în cazul -iname și -name ,există atât o opțiune sensibilă la majuscule, cât și o opțiune insensibilă la majuscule. Spre deosebire de opțiunile -name și -iname, totuși, o căutare -regex și -iregex este aplicată întregii căi, nu doar numelui fișierului. Asta înseamnă că dacă căutați foo, nu obțineți niciun rezultat, deoarece foonu se potrivește cu /home/tux/Documents/foo. În schimb, trebuie fie să căutați întreaga cale, fie să utilizați o secvență wildcard la începutul șirului:

$ find ~ -iregex ".*foo"
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo

găsiți un fișier modificat în ultima săptămână

pentru a găsi un fișier pe care l-ați modificat ultima dată săptămâna trecută, utilizați opțiunea -mtime împreună cu un număr (negativ) de zile din trecut:

$ find ~ -mtime -7
/home/tux/Documents/examples/foo
/home/tux/Documents/examples/Foo
/home/tux/Documents/examples/foo.xml
/home/tux/Documents/examples/foobar.txt

găsirea unui fișier modificat într-un interval de zile

puteți combina opțiunile -mtime pentru a localiza un fișier într-un interval de zile. Pentru primul argument -mtime, furnizați cel mai recent număr de zile în care ați fi putut modifica fișierul, iar pentru al doilea, dați cel mai mare număr de zile. De exemplu, această căutare Caută fișiere cu modificări de mai mult de o zi în trecut, dar nu mai mult de șapte:

$ find ~ -mtime +1 -mtime -7

limitați o căutare după tipul de fișier

este obișnuit să optimizați rezultatele find specificând tipul de fișier pe care îl căutați. Nu ar trebui să utilizați această opțiune dacă nu sunteți sigur ce căutați, dar dacă știți că căutați un fișier și nu un director sau un director, dar nu un fișier, atunci acesta poate fi un filtru excelent de utilizat. Opțiunea este -type, iar argumentele sale sunt un cod de literă care reprezintă câteva tipuri diferite de date. Cele mai frecvente sunt:

  • d – director
  • f – fișier
  • l – legătură simbolică
  • s – soclu
  • p – pipe numit (folosit pentru FIFO)
  • b – bloc special (de obicei, o denumire de hard disk)

iată câteva exemple:

$ find ~ -type d -name "Doc*"
/home/tux/Documents
$ find ~ -type f -name "Doc*"
/home/tux/Downloads/10th-Doctor.gif
$ find /dev -type b -name "sda*"
/dev/sda
/dev/sda1

reglați domeniul de aplicare

comanda find este recursivă în mod implicit, ceea ce înseamnă că caută rezultate în directoarele directoarelor conținute în directoare (și așa mai departe). Acest lucru poate deveni copleșitor într-un sistem de Fișiere mare, dar puteți utiliza opțiunea -maxdepth pentru a controla cât de adânc în structura folderului doriți să coborâți find :

$ find /usr -iname "*xml" | wc -l
15588
$ find /usr -maxdepth 2 -iname "*xml" | wc -l
15

puteți seta alternativ adâncimea minimă de recursivitate cu -mindepth:

$ find /usr -mindepth 8 -iname "*xml" | wc -l
9255

descărcați foaia de înșelăciune

acest articol acoperă doar funcțiile de bază ale find. Este un instrument excelent pentru căutarea prin sistemul dvs., dar este, de asemenea, un front-end foarte util pentru puternica comandă paralelă. Există multe motive pentru a afla find, așa că descărcați foaia noastră gratuită de înșelăciune find pentru a vă ajuta să aflați mai multe despre comandă.

Leave a Reply