listar/encontrar todos os arquivos regulares em todos os subdiretórios, excluindo arquivos binários

listar/encontrar todos os arquivos regulares em todos os subdiretórios, excluindo arquivos binários

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 -iestiver 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 fileserá 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"? filediz 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"

informação relacionada