Linux: Trovare le occorrenze di una data stringa in un set di file.

Nel lavoro di tutti i giorni capita di dover cercare i file in cui è presente una determinata stringa. Vediamo un modo smart per farlo.



Il modo più rozzo - e non sempre applicabile - è il semplice grep recursivo:
grep -r [stringa] /percorso/di/ricerca
Possiamo fare due rilievi a questo metodo:
- Cerca su ogni file presente sul percorso, siano essi file di testo, binari, immagini eccetera. In presenza di link simbolici replica inutilmente la ricerca.
- Non sempre è applicabile, in quanto in alcuni UNIX (Solaris, AIX) il grep non ha questa opzione.

Vediamo allora un modo un po' più efficiente.
Supponiamo di voler cercare l'occorrenza del testo 'IT Naked è bello', nei file con estensione .txt presenti nel percorso:
 /wonder/it/naked/
Possiamo utilizzare il versatilissimo find e combinarlo con grep in questo modo:

find /wonder/it/naked/ -type f -name "*.txt" -print | xargs grep  'IT Naked è bello'


In questo modo andiamo a cercare la stringa solo nei file regolari (opzione -type f) che hanno suffisso .txt . Questa impostazione è - nel caso di ricerche su filesystem corposi per dimensioni e/o numero di file - sempre da preferire al grep recursivo il quale (quando possibile) è molto meno efficiente.

0 commenti:

Posta un commento