No Linux.
Eu sei que posso fazer find . -type f
, mas isso inclui arquivos binários e não consegui encontrar uma maneira de excluí-los com find
Responder1
file /usr/bin/file
, por exemplo, não inclui a palavra "binário" em sua saída no meu sistema. Se file -i
estiver disponível, inclui a palavra "binário". Sem -i
, pode ser mais confiável testar a presença da palavra "texto".
find -type f -exec sh -c "file {} | grep text >/dev/null" \; -print
ou
find -type f -exec sh -c "file {} | grep text >/dev/null" \; -ls
Usando -i
:
find -type f -exec sh -c "file -i {} | grep -v binary >/dev/null" \; -print
Usar file
será apenas uma aproximação, pois utiliza heurística para determinar o tipo de arquivo e não há uma definição rígida e rápida do que constitui um arquivo "binário". Um arquivo vazio é "binário"? file
diz que é. Além disso, existem muitas maneiras (normalmente incomuns) de acionar IDs falsos positivos por meio de file
.
Responder2
Outra maneira seria excluir todos os arquivos que possuem permissão de execução definida para usuário, grupo ou outros:
find . -type f ! -perm /u=x,g=x,o=x
(Se binário for igual a permissões de execução...)
Responder3
mostre todos os arquivos sem permissões executáveis (embora não seja especificamente binário, portanto pode não ser exatamente o que você precisa):
ls -l | awk '{if ($1 !~ /x/) print $8}'
Responder4
Experimente o seguinte comando:
find . -type f -exec file "{}" \; | grep -vE "ELF|archive"