En Linux
Sé que puedo hacerlo find . -type f
, pero eso incluye un archivo binario y no pude encontrar una manera de excluirlos con find
En Linux
Sé que puedo hacerlo find . -type f
, pero eso incluye un archivo binario y no pude encontrar una manera de excluirlos con find
Respuestas:
file /usr/bin/file
, por ejemplo, no incluye la palabra "binario" en su salida en mi sistema. Si file -i
está disponible, incluye la palabra "binario". Sin esto -i
, puede ser más confiable probar 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
Utilizando -i
:
find -type f -exec sh -c "file -i {} | grep -v binary >/dev/null" \; -print
Usar file
solo será una aproximación, ya que está usando la heurística para determinar el tipo de archivo y no existe una definición rápida de lo que constituye un archivo "binario". ¿Es un archivo vacío "binario"? file
dice que es. Además, hay muchas formas (normalmente poco comunes) de activar identificaciones falsas positivas file
.
muestra todos los archivos sin permisos ejecutables (aunque esto no es específicamente binario, por lo que puede que no sea exactamente lo que necesita):
ls -l | awk '{if ($1 !~ /x/) print $8}'
find . -type f \! -executable
Ejemplo usando Python y shell:
IS_BINARY='import sys; sys.exit(not b"\x00" in open(sys.argv[1], "rb").read())'
find . -type f -exec bash -c "python -c '$IS_BINARY' {} || echo {}" \;
El elemento clave está en:
b"\x00" in open("foo.bar", "rb").read()
que comprueba si el archivo tiene carácter NULL .
Pruebe el siguiente comando:
find . -type f -exec file "{}" \; | grep -vE "ELF|archive"
\;
después "{}"
.
Si te refieres a archivos normales que básicamente no contienen caracteres NULL , intenta usar GNU grep
:
grep -PaLr '\x00' .