Sto cercando in un repository Git e vorrei includere la .git
cartella.
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 .git
cartella.
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 .git
invece 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 find
comando, -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 grep
con ls -A
come in questo esempio:
ls -A | grep "^\."
^\.
afferma che il primo carattere deve essere .
L' opzione -A
o --almost-all
esclude 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.