2012-04-29 12 views
62

Sto cercando attraverso un repository Git e vorrei includere la cartella .git.Come posso grep i file nascosti?

grep non include questa cartella se corro

grep -r search * 

quello che sarebbe un comando grep per includere questa cartella?

risposta

85

Si prega di fare riferimento alla soluzione alla fine di questo post come alternativa migliore a quello che stai facendo.

È possibile includere in modo esplicito i file nascosti (una directory è anche un file).

grep -r search * .* 

Il * corrisponderà tutti i file tranne quelli nascosti e .* corrisponderà solo i file nascosti. Tuttavia, questo non funzionerà se non ci sono file non nascosti o file nascosti in una determinata directory. Ovviamente è possibile aggiungere esplicitamente .git anziché .*.

Tuttavia, se si vuole semplicemente cercare in una determinata directory, fare in questo modo:

grep -r search . 

Il . corrisponderà il percorso della corrente, che includerà sia i file non nascosti e nascoste.

+0

Il primo approccio ha funzionato per me. Il secondo approccio (grep -r search.) Non ha trovato la stringa. Ho trovato risultati simili quando ho omesso "-r" e ho cercato solo nella directory di primo livello. Sto usando GNU grep 2.6.3. – Alan

+0

@Alan: È strano. Lo uso regolarmente. Lo hai provato nella stessa directory? – bitmask

+0

Sì, l'ho fatto. A proposito, i risultati sono gli stessi sia che io usi tcsh o bash. È un sistema Debian 5 a 64 bit, per quello che vale. – Alan

2

Forse si preferisce unire "grep" con "trovare" il comando per soluzioni complete come

find . -exec grep -Hn search {} \; 

Questo comando cercherà file o directory all'interno nascoste per la stringa "ricerca" ed elencare qualsiasi file con una coincidenza con questo formato di output:

File percorso: numero di riga: linea con coincidenza

./foo/bar:42:search line 
./foo/.bar:42:search line 
./.foo/bar:42:search line 
./.foo/.bar:42:search line 
1

si consiglia di utilizzare questo approccio:

find ~ -name '*' | xargs grep search 

o se volete semplicemente cercare al livello superiore (che è più rapido per verificare se si sta cercando questi fuori):

find ~ -maxdepth 1 -name '*' | xargs grep search 
0

Tutte le altre risposte sono meglio.Questo potrebbe essere facile da ricordare:

find . -type f | xargs grep search 

trova solo file (comprese nascosto) e grep ogni file

3

Ho appena incontrato questo problema, e sulla base di @ maschera di bit risposta, ecco la mia semplice modifica evitare il problema segnalato da @sehe:

grep -r search_string * .[^.]* 
+0

non ottengo alcun risultato usando questo: 'sudo grep -r ANDROID_HOME *. [^.] *' Che cosa sto facendo male qui? – messerbill

+0

@messerbill dove stai facendo la ricerca? – insaner

0

per cercare nel giro di soli tutti i file nascosti e le directory dalla posizione corrente:

find . -name ".*" -exec grep -rs search {} \; 

solo tutti i file nascosti:

find . -name ".*" -type f -exec grep -s search {} \; 

SOLO tutte le directory nascoste: (. Grep -r ricerca * *)

find . -name ".*" -type d -exec grep -rs search {} \;