Si uso un find
comando como este:
find /mydir/mysubdir -executable -type f
Todos los archivos ejecutables se enumeran (excluyendo directorios), e incluyendo el archivo de script ejecutable (como script.sh, etc.). Lo que quiero hacer es enumerar solo archivos ejecutables binarios.
Respuestas:
Puedes probar la
file
utilidad. Según la página del manual:Puede que tenga que jugar con la expresión regular pero algo así como:
El archivo tiene muchas opciones, por lo que es posible que desee echar un vistazo más de cerca a la página del manual. Utilicé la primera opción que encontré que parecía dar salida fácilmente a grep.
fuente
find -type f -executable -exec sh -c "file -i '{}' | grep -q 'x-executable; charset=binary'" \; -print
. Solo le dará archivos (y, por lo tanto, puede pasar al siguiente comando que quiera ejecutar)find
conbrew install findutils
osudo port install findutils
y luego puede ejecutar una invocación como esta con un efecto similar:gfind . -type f -executable -exec file '{}' \; | grep -i execut
Aquí hay una manera de excluir scripts, es decir, archivos cuyos dos primeros caracteres son
#!
:Para algunos tipos de archivos, no está claro si desea clasificarlos como scripts o binarios, por ejemplo, archivos de código de bytes. Dependiendo de cómo estén configuradas las cosas, estas pueden comenzar o no
#!
. Si esto te importa, tendrás que hacer que el script de shell interno sea más complejo. Por ejemplo, así es como puede incluir binarios ELF y ejecutables Mono y programas de código de bytes de Objective Caml, pero no otros tipos de ejecutables como scripts de shell o scripts de perl o programas de bytecode JVM:fuente
En caso de que te encuentres en un sistema con un nivel inferior
find
(todavía hay, mientras escribo, ¡muchos grupos de ciencia que ejecutan RHEL5!) Sin los derechos para actualizar: en lugar deen las excelentes respuestas anteriores, puede hacer, por ejemplo,
que busca en bits de permiso. Desafortunadamente, lo anterior solo encuentra archivos para los que el usuario tiene ejecutables, pero eso generalmente funciona para mí.
fuente