Cum pot recursiv pentru a găsi toate fișierele în curent și subfoldere pe baza de potrivire wildcard?
Folosi find pentru că:
find . -name "foo*"
"găsi" are nevoie de un punct de plecare, și .
(punct) puncte de la directorul curent.
Conducte găsi în grep este adesea mai convenabil; acesta vă oferă puterea deplină de expresii regulate pentru arbitrare wildcard potrivire.
De exemplu, pentru a găsi toate fișierele cu majuscule string "foo" din fisier:
~$ find . -print | grep -i foo
find -L . -name "foo*"
În câteva cazuri, am nevoie de parametru-L să se ocupe simbolic director link-uri. În mod implicit link-uri simbolice sunt ignorate. În aceste cazuri, a fost destul de confuz ca mi-ar schimba directorul de la un sub-director și vadă dosarul de potrivire de model, dar găsi nu va reveni la numele fișierului. Utilizați -L pentru a rezolva această problemă. Simbolic link-ul de opțiuni pentru a găsi sunt -P -L-H
Dacă shell-ul tau suporta un nou expandarea opțiune (poate fi activat prin: shopt -s globstar
), puteți folosi:
echo **/*foo*
pentru a găsi toate fișierele sau directoarele recursiv. Acest lucru este susținut de Bash 4, zsh și similare, scoici.
Personal am'am primit acest shell funcția definită:
f() { find . -name "*$1*"; }
Notă: linia de mai Sus pot fi lipite direct de la shell sau adăugat în dvs. de utilizator's ~/.bashrc
de fișier.
Apoi mă pot uita pentru orice fișiere prin tastarea:
f some_name
Alternativ, puteți utiliza un fd
utility cu o sintaxă simplă, de exemplu, fd model
.
Puteți folosi:
# find . -type f -name 'text_for_search'
Dacă doriți să utilizați REGX folosi -iname
# find . -type f -iname 'text_for_search'
Modul implicit pentru a căuta recursiv fișier, și este disponibil în cele mai multe cazuri este
find . -name "filepattern"
Începe recursiv de traversare pentru nume de fișier sau un model din cadrul directorul curent unde sunt poziționate. Cu comandă de căutare, aveți posibilitatea să utilizați metacaractere, și diferite switch-uri, pentru a vedea o listă completă de opțiuni, de tip
man find
sau dacă paginile man sunt't disponibil de la sistemul dvs.
find --help
Cu toate acestea, există mai moderne si mai rapide instrumente găsi apoi, care traversează întregul tău sistem de fișiere și indexarea fișierelor, un astfel de instrument comun este de a localiza sau slocate/mlocate, ar trebui să verificați manualul de OPERARE pe cum să-l instalați, și după ce se's-a instalat trebuie să inițieze baza de date, dacă instalați script don't face pentru tine, se poate face manual prin tastarea
sudo updatedb
Și, să-l folosească pentru a căuta un anumit tip de fișier
locate filename
Sau, pentru a căuta nume de fișier sau răpăit din cadrul directorul curent, aveți posibilitatea să tastați:
pwd | xargs -n 1 -I {} locate "filepattern"
Se va arata prin baza sa de date de fișiere rapid și imprima calea de nume care se potrivesc cu modelul care le-ați tastat.
Pentru a vedea lista completă a localiza's opțiuni, de tip:
a localiza --help " sau " om localiza
În plus, puteți configura localiza să actualizare's de date în funcție de ori prin intermediul cron de locuri de muncă, astfel încât proba cron care actualizează db la 1 noaptea, ar arata asa:
0 1 * * * updatedb
Aceste locuri de muncă cron trebuie să fie configurată de către rădăcină, deoarece updatedb are nevoie de root privilegiul de a traversa întregul sistem de fișiere.
Comanda de mai jos vă ajută să căutați pentru orice fișiere
găsi / -iname 'C*.xml' 2>&1 | grep -v "Permisiunea negat"
find / -iname '*C*.xml' 2>&1 | grep -v "Permission denied"
Dacă doriți să căutați fișier special cu wildcard, puteți folosi următorul cod:
find . -type f -name "*.conf"
Să presupunem că doriți să căutați de fiecare .conf fișierele de aici:
.
mijloace de căutare a pornit de aici (locul actual)
de tip
înseamnă tip de element de căutare care aici este dosar (f).
`-numele, înseamnă că doriți să căutați fișiere cu *.conf nume.
Sunt surprins să văd că localizarea nu este folosit foarte mult atunci când trebuie să mergem recursiv.
În primul rând, aș face o localizare "$PWD" pentru a obține lista de fișiere din directorul curent de interes, și apoi executați greps pe ei.
locate "$PWD" | grep -P <pattern>
Desigur, acest lucru este presupunând că updatedb este de făcut și indexul este actualizat periodic. Acest lucru este mult mai rapid mod de a găsi fișiere decât pentru a rula o găsi și rugându-l să meargă în jos copac. De menționat acest lucru pentru completare. Nimic împotriva utilizării găsi, dacă pomul nu este foarte grea.