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?
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:
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.
.*includerà la directory genitore (perché ..corrisponde)
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 * .[^.]*
sudo grep -r ANDROID_HOME * .[^.]*cosa sto facendo di sbagliato qui?
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
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".
~è 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).
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 {} \;
Per trovare solo all'interno di una determinata cartella puoi utilizzare:
ls -al | grep " \."
È un comando molto semplice per elencare e reindirizzare a grep.
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' {} \;
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.
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.