grep -I ignora arquivos não-ASCII. Esta é uma opção não padrão, mas implementada por muitos grep s.
find thefolder -type f -exec grep -q -I . {} ';' -print
Isso listaria todos os arquivos no ou abaixo de thefolder que eram ASCII (de acordo com grep ) e não vazios (estamos pedindo ao grep para procurar um único caractere).
Com o GNU find , você também pode facilmente ignorar arquivos aos quais você não tem acesso de leitura:
find thefolder -type f -readable -exec grep -q -I . {} ';' -print
A única diferença aqui é que você evitaria alguns erros de "permissão negada".
Com a implementação de grep que pode fazer grep recursivo:
grep -rlI . thefolder
Usando file como você sugere:
find thefolder -type f -exec sh -c 'file "$1" | grep -qi text' sh {} ';' -print
Isso é muito mais lento que a primeira solução, mas funciona se você confia em file para fazer sua mágica corretamente.
Sempre ligeiramente mais rápido (só executa sh uma vez ou algumas vezes):
find thefolder -type f -exec sh -c '
for pathname do
if file "$pathname" | grep -qi text; then
printf "%s\n" "$pathname"
fi
done' sh {} +