2012-03-21 15 views
40
find . -type f | xargs file | grep text | cut -d':' -f1 | xargs grep -l "TEXTSEARCH" {} 

è una buona soluzione? per trovare TEXTSEARCH ricorsivamente in soli file testualisolo file di testo grep

+0

la prego di accettare la risposta con il miliardo upvotes invece? –

+1

ok grazie @ Zoltán – StefanoCudini

risposta

165

È possibile utilizzare la -r (ricorsiva) e -I (ignora binario) opzioni in grep:

$ grep -rI "TEXTSEARCH" . 
  • -I elaborare un file binario come se lo ha fatto non contiene dati corrispondenti; questo è equivalente all'opzione --binary-files=without-match.
  • -r Leggere tutti i file in ogni directory, in modo ricorsivo; questo è equivalente all'opzione -d recurse.
+14

Questa è la risposta giusta. – PhiloSurfer

+8

@PhiloSurfer: vota. ;) –

+0

No, questo non può ignorare il file speciale, come socket unix – hylepo

3

Un'altra soluzione meno elegante di keV, è, a catena -exec comandi a trovare insieme, senza xargs e tagliare:

find . -type f -exec bash -c "file -bi {} | grep -q text" \; -exec grep TEXTSEARCH {} ";" 
+23

Guarda la risposta successiva. Non usare questo. – coder543

+0

Quale problema vedi con questo? –

+2

è complesso e inefficiente. Lo strumento grep integrato è in grado di risolvere la domanda con un singolo flag. Questa risposta può fare il lavoro, ma è una soluzione scadente, alla luce dell'esistenza dell'altro. Non sei d'accordo? – coder543

Problemi correlati