Se eu usar find
comando como este:
find /mydir/mysubdir -executable -type f
todos os arquivos executáveis são listados (excluindo diretórios) e incluindo o arquivo de script executável (como script.sh, etc). O que eu quero fazer é listar apenas arquivos executáveis binários.
Respostas:
Você pode tentar o
file
utilitário. De acordo com a página de manual:Você pode ter que brincar com a expressão regular, mas algo como:
O arquivo tem muitas opções, portanto, você pode dar uma olhada na página de manual. Eu usei a primeira opção que achei que parecia gerar uma saída fácil para grep.
fonte
find -type f -executable -exec sh -c "file -i '{}' | grep -q 'x-executable; charset=binary'" \; -print
. Ele só vai te dar os arquivos (e, portanto, pode ser passado para o próximo comando que ele quer correr)find
combrew install findutils
ousudo port install findutils
e, em seguida, você pode executar uma invocação como este para um efeito similar:gfind . -type f -executable -exec file '{}' \; | grep -i execut
Aqui está uma maneira de excluir scripts, ou seja, arquivos cujos dois primeiros caracteres são
#!
:Para alguns tipos de arquivos, não está claro se você deseja que eles sejam classificados como scripts ou binários, por exemplo, arquivos de bytecode. Dependendo de como as coisas estão configuradas, elas podem ou não começar
#!
. Se isso lhe interessa, você terá que tornar o script interno do shell mais complexo. Por exemplo, veja como você pode incluir binários ELF e executáveis Mono e programas de bytecode Objective Caml, mas não outros tipos de executáveis, como shell scripts ou scripts perl ou programas de bytecode da JVM:fonte
Caso você se encontre em um sistema com nível inferior
find
(ainda existem, como eu escrevo, muitos clusters científicos executando o RHEL5!) Sem os direitos de atualização: em vez denas excelentes respostas acima, você pode fazer, por exemplo,
que pesquisa em bits de permissão. Infelizmente, o descrito acima apenas encontra arquivos para os quais o usuário tem executável, mas isso geralmente funciona para mim.
fonte