Găsi

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 23 ianuarie 2020; verificările necesită 7 modificări .

find - un utilitar pentru căutarea fișierelor după nume și alte proprietăți, utilizat în sistemele de operare asemănătoare UNIX . Poate căuta unul sau mai multe directoare folosind criteriile specificate de utilizator . Returnează toate fișierele din directorul de lucru în mod implicit . În plus, permite utilizatorului să aplice anumite acțiuni tuturor fișierelor găsite. Sunt acceptate și expresiile regulate . Pentru a căuta fișiere după conținut, utilizați utilitarul grep . findfind

Lista de taste


Exemple

Căutați în directorul curent

Găsiți toate fișierele din directoarele curente și secundare care încep cu .

Vă rugăm să rețineți: în ceea ce privește Unix , totul, inclusiv directoarele, este un fișier .

găsi. -numele „meu*”

Pentru a căuta numai după numele fișierelor, trebuie să utilizați o opțiune suplimentară-type f 

găsi. -nume „meu*” -tip f

Căutați într-un anume director

Găsiți toate fișierele din directoarele rădăcină și copil care încep cu .

Căutarea în directorul rădăcină este echivalentă cu căutarea în întregul computer.

găsi / -nume „meu*”

Căutarea fișierelor în directoare /usr/local/manși/opt/local/man

găsiți /usr/local/man /opt/local/man -name „my*”

Se caută mai multe nume de fișiere

Găsiți toate fișierele din directoarele curente și secundare care încep cu my sau qu .

Rețineți că în mod implicit, toate argumentele sunt conectate folosind logica și (opțiunea -a, din engleză  și ). Dacă trebuie să combinați mai multe argumente cu un logic sau  - utilizați opțiunea -o, din engleză.  sau .

găsi. \( -nume „meu*” -o -nume „qu*” \) -print

Căutați mai multe tipuri de fișiere folosind expresii regulate

Găsiți toate fișierele din directoarele curente și secundare a căror extensie se potrivește cu cele enumerate.

Această căutare se efectuează folosind expresii regulate .

găsi. -type f -regex „.*\.\(jpg\|jpeg\|gif\|png\|JPG\|JPEG\|GIF\|PNG\)"

Exemplul anterior poate fi scris și folosind expresii regulate

găsi. -type f -regex „\(my\|qu\).*”

Executarea comenzii

Opțiunea -exec execută comanda care o urmează și înlocuiește {}fișierul curent cu acesta. Găsiți toate directoarele sub directorul specificat și schimbați-le permisiunile cu comanda chmod :

find /path -type d -exec chmod 0755 {} \;

Opțiunea -exec este de aproximativ 10 ori mai lentă decât redirecționarea ieșirii prin xargs , așa că este recomandat să scrieți acest cod astfel:

găsi /cale -tip d | xargs chmod 0755

Cu toate acestea, directoarele cu nume care conțin spații nu vor fi procesate prin metoda de redirecționare xargs, așa că ar trebui să utilizați prima opțiune, completată:

find /path -type d -exec chmod 0755 "{}" \;

Sau utilizați opțiunea -print0și -0vă permiteți să procesați argumente care conțin spații și ghilimele:

găsi /cale -tip d -print0 | xargs -0 chmod 0755

Căutați toate fișierele php.ini din directorul curent și înlocuiți textul din fiecare fișier găsit folosind comanda sed .

găsi. -name 'php.ini' -exec sed -i 's/log_errors = Off/log_errors = On/g' "{}" \;

Căutare complexă în mai multe tipuri de fișiere și înlocuiri de text în fiecare dintre ele, din directorul curent și mai jos.

găsi. -regex ".*\.\(php\|js\|css\)" -exec sed -i 's/\/bitrix\/templates\//\/local\/templates\//g' "{} " \;

Căutare pe baza timpului de creare

Găsiți și enumerați fișierele din întregul sistem de fișiere care au fost modificate în ultimul minut:

găsi / -mmin -1 -print

Găsiți și enumerați fișierele din întregul sistem de fișiere care au fost modificate cu mai mult de 31 de zile în urmă:

găsi / -mtime +31 -print

Căutați după dimensiunea fișierului

Găsiți și enumerați fișierele din întregul sistem de fișiere a căror dimensiune este mai mare de 100 MB:

găsi / -dimensiune +100M -print

Găsirea fișierelor deținute de un anumit utilizator

În acest exemplu, căutarea este efectuată pe fișiere deținute de un utilizator numit ilya

găsi. -utilizator ilya

Căutarea fișierelor cu o limită de adâncime

Adâncimea de căutare este relativă la directorul specificat în argumentul comenzii.

Începe căutarea în dosar /var/www, dar nu mai adânc /var/www/*/*/*/*.

găsiți /var/www -maxdepth 4 -name 'restore.php'

Căutați fișiere listând directoare.

Caută fișiere în directoarele specificate.

găsiți /var/spool/postfix/ { deferred,active,maildrop,incoming } / -type f

Căutați fișiere după mască, cu o excepție.

Caută fișiere php în directorul curent, excluzând index.php

găsi. -nume „*.php”  ! -nume „index.php”

Ștergeți recursiv un fișier din directorul curent, la o anumită adâncime.

Șterge toate fișierele restore.phpdin directorul curent până la 4 niveluri de imbricare în raport cu argumentul liniei de comandă

Începe căutarea în folder /var/www, dar nu mai adânc /var/www/*/*/*/*și șterge toate fișierele restore.phpgăsite.

găsiți /var/www -maxdepth 4 -name 'restore.php' -exec rm -r {} \;

Ignorarea erorilor

Dacă apare o eroare în timpul căutării (de exemplu, nu există acces de citire din director), atunci rezultatul comenzii devine mai puțin informativ. Redirecționați ieșirea STDERR către /dev/null .

find / -name 'secret.keys' -print 2 >/dev/null

De asemenea, puteți utiliza una dintre următoarele opțiuni:

find / -name „numele fișierului de căutat” |& grep -v „Permisiune refuzată” find / -name „numele fișierului pe care îl căutați” |& grep -v „Permisiune refuzată”

Link -uri

  • find(1) - pagină de manual pentru comenzile utilizatorului GNU/Linux  (engleză)  (engleză)