Execut următoarea comandă, dar nu este executată recursiv:

find . -name *.java 

Știu că există fișiere java mai jos în directorul curent, dar acesta efectuează find numai în directorul curent. Folosesc OS X, 10.9.

Răspuns

Problema este că nu v-ați citat -name parametru. Faceți acest lucru în schimb:

find . -name "*.java" 

Explicație

Fără ghilimele, shell-ul interpretează *.java ca un model glob și îl extinde la orice nume de fișiere care corespund globului înainte de a-l trece la find. În acest fel, dacă ați avea, spuneți, foo.java în directorul curent, find ar fi:

find . -name foo.java 

care evident ar fi listat fișierul numai în directorul curent (cu excepția cazului în care aveți unele nume similare) fișiere mai jos în copac).

Citarea împiedică extinderea globului și trece linia de comandă la find așa cum este.

De altfel, dacă globul nu a reușit să se potrivească (nu există fișiere *.java în direcția curentă tory), veți obține unul dintre cele două comportamente, în funcție de modul în care shell-ul dvs. este configurat pentru a gestiona globuri care nu se potrivesc (aceasta este guvernată de opțiunea nullglob din Bash, de exemplu ):

  1. Dacă un glob care nu se potrivește nu este extins de shell, find va prezenta (din greșeală, atenție) un comportament corect.
  2. Dacă un glob care nu se potrivește este extins într-un șir gol de către shell, find se va plânge că lipsește un argument pentru -name.

Răspuns

Am avut o situație similară în care înconjurau -numește valoarea în ghilimele, dar tot nu obținea toate accesările de căutare pe care le speram. Am conjecturat că a fost din cauza legăturilor simbolice și a fost destul de sigur că a fost cazul. Dacă doriți să forțați căutarea pentru a căuta prin link-uri simbolice, puteți modifica comanda la următoarele:

find -L . -name "*.java" 

Comentarii

  • Și linkurile simulare au fost problema mea. -follow este un sinonim mai lizibil pentru -L, atâta timp cât îl puneți în fața celorlalți parametri.
  • Excelent ! Mulțumesc mult!! +1!

Răspuns

Evadare *

find . -name \*.java 

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *