Uno dei miei comandi BASH preferiti è:
find . -name '*.*' -exec grep 'SearchString' {} /dev/null \;
che cerca il contenuto di tutti i file nella e sotto la directory corrente per il SearchString specificato. Come sviluppatore, questo è tornato utile a volte.
A causa del mio progetto attuale e della struttura della mia base di codice, tuttavia, mi piacerebbe rendere questo comando BASH ancora più avanzato non cercando alcun file che si trovi dentro o sotto una directory che contiene ".svn" o qualsiasi file che termina con ".html"
La pagina MAN per trovare mi ha confuso. Ho provato a usare -prune e mi ha dato un comportamento strano. Nel tentativo di saltare solo le pagine .html (per iniziare), ho provato:
find . -wholename './*.html' -prune -exec grep 'SearchString' {} /dev/null \;
e non ho ottenuto il comportamento che speravo. Penso che potrei perdere il punto di -prune. Ragazzi, potete aiutarmi?
Grazie
grep -rl 'SearchString'
find
per cercare all'interno di un file.
-name '*.*'
non trova tutti i file: solo quelli con un .
nel loro nome (l'uso di *.*
è in genere un DOS-ism, mentre in Unix normalmente si usa solo *
per quello). Per tutti loro corrispondere in realtà, è sufficiente rimuovere l'argomento del tutto: find . -exec ...
. O se vuoi applicare grep solo ai file (e saltare le directory), allora fallo find . -type f -exec ...
.
find
non è un comando bash