Sé que este es un hilo antiguo, pero me topé con él y pensé en compartir mi método, que he descubierto que es una forma muy rápida de usar find
para encontrar solo archivos no binarios:
find . -type f -exec grep -Iq . {} \; -print
El -I
opción a grep le dice que ignore inmediatamente los archivos binarios y el .
opción junto con el -q
hará que coincida inmediatamente con los archivos de texto, por lo que va muy rápido. Puedes cambiar el -print
a un -print0
para canalizar en un xargs -0
o algo si te preocupan los espacios (¡gracias por el consejo, @lucas.werkmeister!)
Además, el primer punto solo es necesario para ciertas versiones BSD de find
como en OS X, pero no hace daño tenerlo allí todo el tiempo si quieres ponerlo en un alias o algo así.
EDITAR :Como @ruslan señaló correctamente, el -and
se puede omitir ya que está implícito.
Basado en esta pregunta SO:
grep -rIl "needle text" my_folder
¿Por qué no es práctico? Si necesita usarlo con frecuencia y no quiere escribirlo cada vez, simplemente defina una función bash para él:
function findTextInAsciiFiles {
# usage: findTextInAsciiFiles DIRECTORY NEEDLE_TEXT
find "$1" -type f -exec grep -l "$2" {} \; -exec file {} \; | grep text
}
ponlo en tu .bashrc
y luego simplemente ejecuta:
findTextInAsciiFiles your_folder "needle text"
cuando quieras.
EDITAR para reflejar la edición de OP:
si desea eliminar la información mímica, simplemente puede agregar una etapa adicional a la canalización que filtre la información mímica. Esto debería funcionar, tomando solo lo que viene antes de :
: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
}