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 -i
está 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 file
solo 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"? file
dice 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"