Je sais que c'est un vieux fil, mais je suis tombé dessus et j'ai pensé partager ma méthode que j'ai trouvée être un moyen très rapide d'utiliser find
pour rechercher uniquement les fichiers non binaires :
find . -type f -exec grep -Iq . {} \; -print
Le -I
l'option grep lui dit d'ignorer immédiatement les fichiers binaires et le .
option avec le -q
le fera correspondre immédiatement aux fichiers texte, donc ça va très vite. Vous pouvez modifier le -print
à un -print0
pour la tuyauterie dans un xargs -0
ou quelque chose si vous êtes préoccupé par les espaces (merci pour le tuyau, @lucas.werkmeister !)
De plus, le premier point n'est nécessaire que pour certaines versions BSD de find
comme sur OS X, mais ça ne fait rien de l'avoir là tout le temps si vous voulez mettre ça dans un alias ou quelque chose comme ça.
MODIFIER :Comme @ruslan l'a correctement souligné, le -and
peut être omis puisqu'il est sous-entendu.
Basé sur cette question SO :
grep -rIl "needle text" my_folder
Pourquoi c'est pas pratique ? Si vous avez besoin de l'utiliser souvent et que vous ne voulez pas le saisir à chaque fois, définissez simplement une fonction bash :
function findTextInAsciiFiles {
# usage: findTextInAsciiFiles DIRECTORY NEEDLE_TEXT
find "$1" -type f -exec grep -l "$2" {} \; -exec file {} \; | grep text
}
mettez-le dans votre .bashrc
puis lancez :
findTextInAsciiFiles your_folder "needle text"
quand vous voulez.
MODIFIER pour refléter la modification d'OP :
si vous souhaitez supprimer les informations mime, vous pouvez simplement ajouter une étape supplémentaire au pipeline qui filtre les informations mime. Cela devrait faire l'affaire, en ne prenant que ce qui vient avant :
: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
}