Comment trouver uniquement les fichiers exécutables sous un certain répertoire sous Linux ?
Réponses
Trop de publicités?La vérification des fichiers exécutables peut être faite avec -perm
(non recommandé) ou -executable
(recommandé, car il tient compte de l'ACL). Pour utiliser le -executable
option :
find <dir> -executable
si vous voulez trouver uniquement les fichiers exécutables et non les répertoires interrogeables, combinez avec -type f
:
find <dir> -executable -type f
Utilisez la recherche -perm
option. Cela permettra de trouver les fichiers dans le répertoire actuel qui sont exécutables par leur propriétaire, par les membres du groupe ou par d'autres personnes :
find . -perm /u=x,g=x,o=x
Edit :
Je viens de trouver une autre option qui est présente au moins dans GNU find 4.4.0 :
find . -executable
Cela devrait fonctionner encore mieux car les ACL sont également prises en compte.
Je sais que la question mentionne spécifiquement Linux, mais comme c'est le premier résultat sur Google, je voulais juste ajouter la réponse que je cherchais (par exemple si vous êtes - comme moi en ce moment - forcé par votre employeur à utiliser un système non GNU/Linux).
Testé sur macOS 10.12.5
find . -perm +111 -type f
J'ai une autre approche, au cas où ce que vous voulez vraiment, c'est juste faire quelque chose avec les fichiers exécutables - et pas nécessairement forcer find à se filtrer lui-même :
for i in `find -type f`; do [ -x $i ] && echo "$i is executable"; done
Je préfère cette méthode car elle ne repose pas sur -executable
qui est spécifique à la plate-forme ; et il ne s'appuie pas sur les éléments suivants -perm
ce qui est un peu obscur, un peu spécifique à une plateforme, et comme écrit ci-dessus, exige que le fichier soit exécutable pour tout le monde (pas seulement pour vous).
El -type f
est important car, dans *nix, les répertoires doivent être exécutables pour pouvoir être traversés, et plus la requête se trouve dans le fichier find
plus votre commande sera efficace en termes de mémoire.
Quoi qu'il en soit, je propose simplement une autre approche, puisque *nix est le pays d'un milliard d'approches.
Un fichier marqué comme exécutable ne doit pas nécessairement être un fichier ou un objet exécutable ou chargeable.
Voici ce que j'utilise :
find ./ -type f -name "*" -not -name "*.o" -exec sh -c '
case "$(head -n 1 "$1")" in
?ELF*) exit 0;;
MZ*) exit 0;;
#!*/ocamlrun*)exit0;;
esac
exit 1
' sh {} \; -print
- Réponses précédentes
- Plus de réponses