Come posso grep i file nascosti?


96

Sto cercando in un repository Git e vorrei includere la .gitcartella.

grep non include questa cartella se eseguo

grep -r search *

Quale sarebbe un comando grep per includere questa cartella?

Risposte:


136

Si prega di fare riferimento alla soluzione alla fine di questo post come alternativa migliore a ciò che si sta facendo.

Puoi includere esplicitamente file nascosti (anche una directory è un file).

grep -r search * .*

Il *corrisponderà tutti i file tranne quelli nascosti e .*corrisponderà solo i file nascosti. Tuttavia, questo fallirà se non ci sono file non nascosti o file nascosti in una determinata directory. Ovviamente potresti aggiungere esplicitamente .gitinvece di .*.

Tuttavia, se vuoi semplicemente cercare in una determinata directory, fallo in questo modo:

grep -r search .

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


1
Il primo approccio (grep -r search *. *) Ha funzionato per me. Il secondo approccio (grep -r search.) Non ha trovato la stringa. Ho trovato risultati simili omettendo "-r" e cercando solo nella directory di primo livello. Sto usando GNU grep 2.6.3.
Alan

@ Alan: è strano. Lo uso regolarmente. L'hai provato nella stessa directory?
maschera di bit

27
utilizzando .*includerà la directory genitore (perché ..corrisponde)
vedi

1
È sicuro generalizzare su questa soluzione poiché il comportamento può variare tra le shell?
astletron

6
per la prima versione è necessario aggiungere --exclude-dir = .. per evitare di cercare nelle cartelle principali
user762353

12

Mi sono appena imbattuto in questo problema e, in base alla risposta di @ bitmask, ecco la mia semplice modifica per evitare il problema segnalato da @sehe:

grep -r search_string * .[^.]*

non ottengo alcun risultato usando questo: sudo grep -r ANDROID_HOME * .[^.]*cosa sto facendo di sbagliato qui?
messerbill

@messerbill dove stai eseguendo la ricerca?
folle

3

Forse preferirai combinare "grep" con il comando "find" per una soluzione completa come:

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

Questo comando cercherà all'interno di file o directory nascosti la stringa "cerca" ed elencherà tutti i file con una coincidenza con questo formato di output:

Percorso file: Numero riga: riga con coincidenza

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

2

Potresti voler usare questo approccio, supponendo che tu stia cercando nella directory corrente (altrimenti sostituisci. Con la directory desiderata):

find . -type f | xargs grep search

o se vuoi solo cercare al livello più alto (che è più veloce da testare se stai provando questi):

find . -type f -maxdepth 1 | xargs grep search

AGGIORNAMENTO: ho modificato gli esempi in risposta ai commenti di Scott. Ho anche aggiunto "-type f".


1
(1)  ~è la directory home dell'utente. La domanda non riguardava la directory home dell'utente, quindi la risposta non dovrebbe essere menzionata  ~. (2) In un  findcomando, -name '*'è un no-op (cioè, non ha scopo).
Scott

1

Per cercare SOLO in tutti i file e le directory nascosti 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:

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

1

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

find . -type f | xargs grep search

Trova solo i file (inclusi quelli nascosti) e greps ogni file.


0

Per trovare solo all'interno di una determinata cartella puoi utilizzare:

ls -al | grep " \."

È un comando molto semplice per elencare e reindirizzare a grep.


0

Oltre al suggerimento di Tyler, ecco il comando per grep tutti i file e le cartelle in modo ricorsivo, inclusi i file nascosti

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

0

Per impedire la corrispondenza .e ..che non sono file nascosti, puoi usare grepcon ls -Acome in questo esempio:

ls -A | grep "^\."

^\. afferma che il primo carattere deve essere .

L' opzione -Ao --almost-allesclude i risultati .e in ..modo che vengano confrontati solo i file e le directory nascosti.


0

Puoi anche cercare tipi specifici di file nascosti in questo modo per i file di directory nascosti:

grep -r --include=*.directory "search-string"

Questo potrebbe funzionare meglio di alcune delle altre opzioni. Le altre opzioni che hanno funzionato possono essere troppo lente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.