Você pode usar o utilitário Unix file
, que pode informar o que um arquivo é baseado em seu conteúdo. Você precisará do ambiente Cygwin ou de um pacote win32-port como GnuWin32 ou UnxUtils .
Veja como o file
funciona:
# previously, e.exe was renamed to e.jpg
$ file e.jpg
e.jpg: MS-DOS executable PE for MS Windows (console) Intel 80386 32-bit
Obviamente, você precisa dar a file
um nome de arquivo (ou uma lista de nomes de arquivos) como argumento (s). Você poderia fazer isso com find
se você sabe aproximadamente onde o arquivo deve estar, usando find
e um nome de pasta:
$ find <foldername> -type f -print0 | xargs -0 file
Se você combinar isso com grep
, poderá remover os não executáveis:
$ find e-0.02718 -type f -print0 | xargs -0 file | grep executable
e-0.02718/e.jpg: MS-DOS executable PE for MS Windows (console) Intel 80386 32-bit
e-0.02718/e.linux: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), stripped
e-0.02718/e.sun4u56: ELF 32-bit MSB executable, SPARC, version 1 (SYSV), dynamically linked (uses shared libs), stripped
e-0.02718/EXAMPLES: Bourne shell script text executable
e-0.02718/makefile: script text executable for make -f
O Cygwin e o GnuWin32 fornecem os comandos file
e find
(por meio dos pacotes file
e findutils
).
UnxUtils inclui find
, mas não consigo verificar se o comando file
está incluído. O pacote não parece ser mantido, então o GnuWin32 é provavelmente uma opção melhor.