123 votes

Commande Linux : Comment « trouver » uniquement des fichiers texte ?

Après quelques recherches à partir de Google, ce que j'ai trouvé est :

find my_folder -type f -exec grep -l "needle text" {} \; -exec file {} \; | grep text

qui est très peu maniable et produit des textes inutiles tels que des informations de type MIME. Une meilleure solution ? J'ai beaucoup d'images et d'autres fichiers binaires dans le même dossier avec beaucoup de fichiers texte que je dois rechercher.

11voto

crayzeewulf Points 1487

Sur la base de cette question SO :

grep -rIl "needle text" my_folder

5voto

anttir Points 655
find . -type f -print0 | xargs -0 file | grep -P text | cut -d: -f1 | xargs grep -Pil "search"

Ce n'est malheureusement pas économiser de l'espace. Mettre cela dans le script bash rend les choses un peu plus faciles.

C'est sans danger pour l'espace :

#!/bin/bash
#if [ ! "$1" ] ; then
    echo "Usage: $0 <search>";
    exit
fi

find . -type f -print0 \
  | xargs -0 file \
  | grep -P text \
  | cut -d: -f1 \
  | xargs -i% grep -Pil "$1" "%"

4voto

The IT Guy Points 66

Une autre façon de le faire :

# find . |xargs file {} \; |grep "ASCII text"

Si vous voulez aussi des fichiers vides :

#  find . |xargs file {} \; |egrep "ASCII text|empty"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X