No hay diferencia entre un archivo binario y un archivo de texto en Linux. La utilidad file
examina los contenidos y las conjeturas. Desafortunadamente, no es de mucha ayuda porque file
no produce una respuesta simple de "binario o texto"; tiene un resultado complejo con una gran cantidad de casos que debería analizar.
Un enfoque es leer un prefijo de tamaño fijo de un archivo, digamos 256 bytes, y luego aplicar heurística. Por ejemplo, ¿están todos los valores de bytes de 0x0 a 0x7F, evitando los códigos de control a excepción de los espacios en blanco comunes? Eso sugiere ASCII? Si hay bytes 0x80 a 0xFF, ¿el decodificador completo (excepto un código al final que puede cortarse) decodifica como UTF-8 válido? Etc.
Una idea podría ser explotar astutamente las utilidades que detectan archivos binarios, como GNU diff
.
$ diff -r /bin/ls <(echo foo)
Binary files /bin/ls and /dev/fd/63 differ
Sin sustitución proceso, todavía funciona:
$ diff -r /bin/ls /dev/null
Binary files /bin/ls and /dev/null differ
Ahora solo GrEP la salida de ese y buscar la palabra Binary
.
La pregunta es si la heurística de diff
para archivos binarios funciona para sus propósitos.
¿Qué hay de archivo de texto codificación UTF-8? ¿Lo cuenta como un archivo binario? – PasteBT
Por convención, los binarios ejecutables no tienen extensiones. – jordanm
@jordanm Aparte de esa cosa de estrella, y estar en un color audaz. * pato * :) – Kaz