enumerar/buscar todos los archivos normales en todos los subdirectorios, excepto los archivos binarios

enumerar/buscar todos los archivos normales en todos los subdirectorios, excepto los archivos binarios

En Linux.

Sé que puedo hacerlo find . -type f, pero eso incluye archivos binarios y no pude encontrar una manera de excluirlos con buscar

Respuesta1

file /usr/bin/file, por ejemplo, no incluye la palabra "binario" en su salida en mi sistema. Si file -iestá disponible, incluye la palabra "binario". Sin -i, puede ser más confiable comprobar la presencia de la palabra "texto".

find -type f -exec sh -c "file {} | grep text >/dev/null" \; -print

o

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 filesolo será una aproximación, ya que utiliza heurísticas para determinar el tipo de archivo y no existe una definición estricta de lo que constituye un archivo "binario". ¿Un archivo vacío es "binario"? filedice que lo es. Además, existen muchas formas (normalmente poco comunes) de activar identificaciones falsas positivas mediante file.

Respuesta2

Otra forma sería excluir todos los archivos que tengan permisos de ejecución establecidos para usuarios, grupos u otros:

find . -type f ! -perm /u=x,g=x,o=x

(Si binario es igual a permisos de ejecución...)

Respuesta3

muestra todos los archivos sin permisos ejecutables (aunque esto no es específicamente binario, por lo que puede que no sea exactamente lo que necesitas):

ls -l | awk '{if ($1 !~ /x/) print $8}'

Respuesta4

Pruebe el siguiente comando:

find . -type f -exec file "{}" \; | grep -vE "ELF|archive"

información relacionada