logo

Găsiți comanda în Linux/Unix cu exemple

Comanda find ne ajută să găsim un anumit fișier într-un director. Este folosit pentru a găsi lista de fișiere pentru diferite condiții, cum ar fi permisiunea, proprietatea utilizatorului, modificarea, data/ora, dimensiunea și multe altele.

În sistemele de operare asemănătoare Unix și în alte sisteme de operare, comanda find este un utilitar de linie de comandă care găsește fișiere pe baza câtorva formate specificate de utilizator și fie tipărește calea tuturor obiectelor potrivite, fie, dacă sunt solicitate alte acțiuni, implementează acea acțiune pe toate obiectele potrivite.

Începe o căutare dintr-o locație de pornire dorită și, după aceea, traversează recursiv directoarele (nodurile) unei structuri ierarhice (în general un arbore). Comanda find poate căuta și traversa din diferite sisteme de partiții de fișiere aparținând unui singur sau mai multor dispozitive de stocare din directorul de pornire.

Formatul de căutare conține un model de potrivire cu numele fișierului sau intervalul de timp pentru potrivirea cu timpul de modificare sau timpul de acces la fișier. Comanda find oferă o listă a fiecărui fișier din directorul de lucru curent în mod implicit. Cu toate acestea, utilizatorii pot restricționa căutarea la un nivel maxim dorit în directorul de pornire.

Programele de localizare asociate aplică o bază de date de fișiere indexată obținută din comanda fine pentru a oferi o tehnică mai rapidă de căutare a întregului sistem de fișiere după nume.

Utilitarul de căutare vine implicit cu majoritatea distribuții Linux , deci nu trebuie să instalăm niciun pachet suplimentar. Este una dintre cele mai esențiale și utilizate comenzi ale Linux sistem.

 find 

Cele două opțiuni determină modul în care find ar trebui să ia în considerare legăturile simbolice. Natura implicită este să nu urmărești niciodată legături simbolice. Steagul, adică -L , va conduce găsi să urmărească legături simbolice. Steagul, adică -H , va urmări doar legături simbolice, continuând cu argumentele liniei de comandă. Flag-urile sunt menționate în standardul POSIX pentru comanda find. O extensie de bază este un steag, adică -P , pentru a dezactiva explicit linkul simbolic următor.

Măcar o cale trebuie să anticipeze expresia. Comanda find poate interpreta în mod intern caracterele metalice, iar comenzile trebuie citate cu atenție pentru a gestiona shell-ul global.

Componentele expresiei sunt izolate de limita argumentului liniei de comandă, indicată în general ca spațiu alb în sintaxa shell-ului. Ele sunt considerate din partea stângă în partea dreaptă. Ele pot include componente logice precum SAU și ȘI, precum și predicate (acțiuni și filtre). GNU find conține câteva alte caracteristici nemenționate de POSIX.

Următoarele simboluri sunt folosite pentru a specifica directorul:

(.) : Pentru numele directorului curent

(/) : Pentru directorul rădăcină

Scurt istoric al comenzii Find

Comanda find a apărut în versiunea 5 Unix ca un element al Bancul de lucru al programatorului proiect și a fost specificat de Dick Haight cu cpio, care au fost dezvoltate pentru a fi utilizate împreună.

Inițial, implementarea GNU a comenzii find a fost specificată de Eric Decker . Mai târziu, a fost dezvoltat de David MacKenzie, Tim Wood , și Jay Plett . De asemenea, comanda find a fost portată pe sistemul de operare IBM i.

graficul de alocare a resurselor

Predicate

Primarele utilizate pe scară largă sunt:

părtinire și varianță
    -model de nume:Verifică dacă numele fișierului este același cu modelul shell-glob dat sau nu.-tip tip:Verifică dacă fișierul este un tip furnizat.-imprimare:Întotdeauna oferă adevărata valoare. Tipărește numele fișierului curent și o linie nouă la stdout.-print0:Întotdeauna dă adevărata valoare. Tipărește numele fișierului curent și un caracter nul în stdout. Nu este nevoie de POSIX.-program exec [argument ...];:Întotdeauna oferă adevărata valoare. Execută un program cu argumentele date fixe și calea curentă a fișierului.-exec program [argument ...] { } +:Întotdeauna dă adevărata valoare. Execută un program cu argumentele date fixe și cât mai multe căi posibil. Pentru aproape fiecare implementare, alte apariții {} înseamnă copii suplimentare ale numelui dat (aspect care nu este necesar pentru POSIX).-ok program [argument ...];:Este la fel ca -exec, dar va returna false sau adevărat dacă programul dă 0.

Găsiți valorile implicite pentru implementarea -print în cazul în care condițiile sunt adevărate dacă expresia nu utilizează niciunul dintre -ok, -exec, -print sau -print0.

Operatori

Operatorii îmbunătățesc expresiile de comandă find. Ele sunt menționate în ordinea descrescătoare a priorității:

    ( expr ):Acest operator poate forța prioritatea.! expr:Dacă expr returnează false, returnează adevărat.
  • expr1 expr2 (sau expr1 -a expr2 : AND. expr2 nu este evaluată dacă expr1 este falsă.
  • expr1 -o expr2 : SAU. expr2 nu este evaluată dacă expr1 este adevărată.

Exemple ale comenzii find

Să vedem următoarele exemple ale comenzii find:

Găsiți fișiere după nume

Putem căuta toate fișierele care se termină cu extensia „.txt”. Pentru a face acest lucru, executați comanda de mai jos:

 find . -name '*.txt' 

Comanda de mai sus va lista toate fișierele text din directorul de lucru curent. Luați în considerare rezultatul de mai jos:

Găsiți Linux

Din rezultatul de mai sus, toate fișierele care au extensia „.txt” sunt listate cu comanda find.

Găsirea fișierelor după tip

Parametrul „-type” este utilizat pentru a specifica tipul de fișier.

Unele dintre tipurile de fișiere sunt după cum urmează:

  • f: fișier obișnuit
  • d: director
  • l: legături simbolice
  • c: dispozitive de caractere
  • b: blocarea dispozitivelor

Luați în considerare comanda de mai jos:

 find . -type d -name '*.bak' 

Comanda de mai sus va lista toate directoarele cu extensia „.bak”. Luați în considerare rezultatul de mai jos:

Găsiți Linux

Din rezultatul de mai sus, comanda „find . -type d -name „*.bak” afișează toate directoarele care se termină cu „.bak”.

Găsiți fișiere mai noi

Parametrul „-newer” ajută la căutarea fișierelor care sunt mai noi decât fișierul menționat. Luați în considerare comanda de mai jos:

 find . -newer msg.txt 

Comanda de mai sus va afișa toate fișierele care sunt mai noi decât „msg.txt” din directorul de lucru curent. Luați în considerare rezultatul de mai jos:

Găsiți Linux

Din rezultatul de mai sus, toate fișierele afișate sunt mai noi decât fișierul „msg.txt”.

Găsiți și ștergeți un fișier

Opțiunea „-delete” este folosită pentru a șterge un anumit fișier. Trebuie să fim foarte atenți când folosim această comandă, deoarece nu există nicio opțiune de anulare dacă este odată executată. Luați în considerare comanda de mai jos:

 find . -name Demo.txt -delete 

Comanda de mai sus va șterge fișierul „Demo.txt” din directorul de lucru curent. Luați în considerare rezultatul de mai jos:

Găsiți Linux

Găsiți un director

Opțiunea „type -d” este folosită pentru a găsi un director. Luați în considerare comanda de mai jos:

 find . type -depth -name Newdirectory 

Comanda de mai sus va găsi locația „Newdirectory”. Luați în considerare rezultatul de mai jos:

Găsiți Linux

Găsiți fișiere după momentul modificării

Opțiunea „-mtime”, urmată de numărul de zile, este folosită pentru a găsi fișierele prin modificare. Numărul de zile poate fi pozitiv sau negativ. Valoarea negativă va fi folosită pentru mai puțin decât -1 este folosit pentru ultima zi și, în mod similar, +1 va găsi fișierul pentru mai mult de o zi în urmă. Luați în considerare comanda de mai jos:

 find ./Newdirectory -mtime -1 

Comanda de mai sus va găsi fișierele care sunt modificate în ultima zi. Luați în considerare rezultatul de mai jos:

Găsiți Linux

Găsiți fișiere cu permisiunea

Opțiunea „-perm” este folosită pentru a găsi fișiere cu permisiunea. Executați comanda find cu opțiunea „-perm” și transmiteți valoarea necesară. Luați în considerare comanda de mai jos:

 find ./ -perm 777 

Comanda de mai sus va lista fișierele din directorul specificat pe care toată lumea le-ar putea citi, scrie și executa.

Găsiți și înlocuiți fișierele

Pentru a găsi și înlocui fișiere, trebuie să combinăm comanda find cu comanda sed. Pentru a opera pe fișiere, utilizați opțiunea „-exec” cu comanda find. Luați în considerare comanda de mai jos:

 find ./Newdirectory -type f -exec sed -i 's/find/replace/g' {} ; 

din comanda de mai sus, apariția specificată va fi înlocuită. Luați în considerare rezultatul de mai jos:

Găsiți Linux

Găsiți text în mai multe fișiere

Putem face o altă combinație a comenzii find cu comanda grep pentru a găsi textul din diferitele fișiere. Luați în considerare comanda de mai jos:

 find ./Newdirectory -type f -name '*.txt' -exec grep 'demo' {} ; 

Comanda de mai sus va găsi liniile care conțin textul „demo” din toate fișierele text din directorul „Newdirectory”. Luați în considerare rezultatul de mai jos:

Găsiți Linux

Din rezultatul de mai sus, putem vedea că liniile cu textul „demo” au fost afișate.

java long la int

Căutați în fiecare director

 $ find / -name file1 -type f -print 

Comanda de mai sus găsește toate directoarele pentru un fișier obișnuit al cărui titlu este fișier1 și îl tipărește pe ecran. În general, nu este o idee bună să căutați fișiere în acest fel. Poate dura mult timp. Deci, cel mai bine este să menționați directorul. Câteva sisteme de operare pot monta sisteme de fișiere (dinamice) care nu sunt favorabile comenzii find. Numele de fișiere mai complicate care conțin caractere unice pentru shell poate necesita să fie închise între ghilimele simple.