Sto eseguendo il seguente comando, ma non viene eseguito in modo ricorsivo:

find . -name *.java 

So che ci sono file java più in basso nella directory corrente, ma sta eseguendo find solo nella directory corrente. Sto usando OS X, 10.9.

Risposta

Il problema è che non hai “citato il tuo . Procedi in questo modo:

find . -name "*.java" 

Spiegazione

Senza virgolette, la shell interpreta *.java come un modello glob e lo espande a qualsiasi nome di file corrispondente al glob prima di passarlo a find. In questo modo, se avessi, ad esempio, foo.java nella directory corrente, find “la riga di comando effettiva sarebbe:

find . -name foo.java 

che ovviamente elenca solo il file nella directory corrente (a meno che tu non abbia qualche nome simile file più in basso nellalbero).

Le virgolette impediscono lespansione di glob e passano la riga di comando a find così comè.

Per inciso, se il glob non era riuscito a trovare una corrispondenza (nessun file *.java nella directory corrente tory), potresti ottenere uno dei due comportamenti a seconda di come la tua shell è impostata per gestire i glob che non corrispondono (questo è governato dallopzione nullglob in Bash, per esempio ):

  1. Se un glob che non corrisponde non viene espanso dalla shell, find mostrerà (accidentalmente, badate bene) un comportamento corretto.
  2. Se un glob che non “t corrisponde viene espanso in una stringa vuota dalla shell, find si lamenterà che manca un argomento per -name.

Risposta

Ho avuto una situazione simile in cui mi trovavo intorno al -name valore tra virgolette, ma non riuscivo ancora a ottenere tutti i risultati di ricerca che speravo. Ho ipotizzato che fosse a causa dei collegamenti simbolici e abbastanza sicuro che fosse il caso. Se vuoi forzare la ricerca per la ricerca attraverso i link simbolici, puoi modificare il comando in questo modo:

find -L . -name "*.java" 

Commenti

  • Anche i collegamenti simbolici erano il mio problema. -follow è un sinonimo più leggibile di -L, a patto di metterlo prima degli altri parametri.
  • Ottimo ! Molte grazie!! +1!

Risposta

Scappa da *

find . -name \*.java 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *