Si j'utilise une find
commande comme celle-ci:
find /mydir/mysubdir -executable -type f
tous les fichiers exécutables sont répertoriés (à l'exclusion des répertoires) et incluent les fichiers de script exécutables (tels que script.sh, etc.). Ce que je veux faire est de ne lister que les fichiers exécutables binaires.
Réponses:
Vous pourriez essayer l'
file
utilitaire. Selon la page de manuel:Vous pourriez avoir à jouer avec l'expression régulière, mais quelque chose comme:
Le fichier contient de nombreuses options. Vous voudrez peut-être jeter un coup d’œil à la page de manuel. J'ai utilisé la première option que j'ai trouvée qui semblait produire une sortie facile à grep.
la source
find -type f -executable -exec sh -c "file -i '{}' | grep -q 'x-executable; charset=binary'" \; -print
. Il ne vous donnera que des fichiers (et peut donc être passé à la prochaine commande qu'il veut exécuter)find
avecbrew install findutils
ousudo port install findutils
, puis vous pouvez exécuter une invocation comme celle-ci avec un effet similaire:gfind . -type f -executable -exec file '{}' \; | grep -i execut
Voici un moyen d’exclure des scripts, c’est-à-dire des fichiers dont les deux premiers caractères sont
#!
:Pour certains types de fichiers, il n'est pas clair si vous souhaitez les classer en tant que scripts ou binaires, par exemple, des fichiers de type bytecode. Selon la manière dont les choses sont configurées, celles-ci peuvent commencer ou non
#!
. Si cela vous importe, vous devrez rendre le script de shell interne plus complexe. Par exemple, voici comment inclure des fichiers binaires ELF, des exécutables Mono et des programmes de bytecode Objective Caml, mais pas d’autres types d’exécutables tels que des scripts shell, des scripts perl ou des programmes de bytecode JVM:la source
Juste au cas où vous vous retrouveriez sur un système avec un niveau inférieur
find
(il existe toujours, comme je l’écris, beaucoup de grappes scientifiques fonctionnant sous RHEL5!) Sans les droits de mise à jour: au lieu dedans les excellentes réponses ci-dessus, vous pouvez faire, par exemple,
qui recherche sur les bits de permission. Malheureusement, ce qui précède ne trouve que les fichiers pour lesquels l'utilisateur dispose d'un exécutable, mais cela fonctionne généralement pour moi.
la source