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 {} +