So che questo è un vecchio thread, ma mi sono imbattuto in esso e ho pensato di condividere il mio metodo che ho trovato essere un modo molto veloce per usare find
per trovare solo file non binari:
find . -type f -exec grep -Iq . {} \; -print
Il -I
L'opzione di grep gli dice di ignorare immediatamente i file binari e il .
opzione insieme al -q
lo farà corrispondere immediatamente ai file di testo, quindi va molto veloce. Puoi cambiare il -print
a un -print0
per il piping in un xargs -0
o qualcosa del genere se sei preoccupato per gli spazi (grazie per il suggerimento, @lucas.werkmeister!)
Anche il primo punto è necessario solo per alcune versioni BSD di find
come su OS X, ma non fa male avere tutto il tempo lì se vuoi metterlo in un alias o qualcosa del genere.
MODIFICA :Come ha correttamente sottolineato @ruslan, il file -and
può essere omesso poiché è implicito.
Sulla base di questa domanda SO :
grep -rIl "needle text" my_folder
Perché è poco pratico? Se hai bisogno di usarlo spesso e non vuoi digitarlo ogni volta, definisci semplicemente una funzione bash per questo:
function findTextInAsciiFiles {
# usage: findTextInAsciiFiles DIRECTORY NEEDLE_TEXT
find "$1" -type f -exec grep -l "$2" {} \; -exec file {} \; | grep text
}
inseriscilo nel tuo .bashrc
e poi basta eseguire:
findTextInAsciiFiles your_folder "needle text"
quando vuoi.
MODIFICA per riflettere la modifica dell'OP:
se vuoi eliminare le informazioni mime, puoi semplicemente aggiungere un'ulteriore fase alla pipeline che filtra le informazioni mime. Questo dovrebbe risolvere il problema, prendendo solo ciò che viene prima di :
:cut -d':' -f1
:
function findTextInAsciiFiles {
# usage: findTextInAsciiFiles DIRECTORY NEEDLE_TEXT
find "$1" -type f -exec grep -l "$2" {} \; -exec file {} \; | grep text | cut -d ':' -f1
}