Comment rechercher dans tout mon système de fichiers Linux pour tous les fichiers python (fichiers avec l'extension .py
)? Je sais que je peux faire find -name filename
mais comment puis-je le faire pour le type de fichier?
Tous les fichiers python n'auront pas l'extension .py
- essayez d'exécuter grep -rni python /usr/bin
par exemple). La plupart de ces scripts auront une ligne 'Shebang' (ou hashbang) (par exemple, #!/usr/bin/env python
, #!/usr/bin/python2.7
). Ceci informe l'interprète du script du programme devant être utilisé pour l'exécuter. Vous pouvez le rechercher pour trouver les fichiers python.
Cependant, vous pouvez également utiliser le type MIME du fichier (généralement le long de text/x-python
) pour le trouver:
find / -type f | while read in ; do if file -i "${in}" | grep -q x-python ; then echo "${in}" ; fi ; done
Où /
est votre répertoire de recherche prévu.
Avec find
, vous pouvez également ajouter l'option -executable
pour rechercher uniquement les fichiers exécutables. Également, l'utilisation de -type f
restreint la recherche à la recherche de fichiers uniquement - vous pouvez modifier cela, puis afficher des liens symboliques, etc. (certains scripts sont contenus dans /usr/lib
etc et liés symboliquement à /usr/bin/
tc). Beaucoup d'autres options sont disponibles, vous pouvez les voir en exécutant man find
.
file
devrait pouvoir deviner le type de fichier même si le fichier n'a pas d'extension etc. (en utilisant la ligne Shebang, etc.) - voir ici .
Pour supprimer les erreurs find: ‘/.../FILE’: Permission denied
etc, vous pouvez exécuter le script en tant que root (à l'aide de Sudo bash -c "COMMAND"
, ouvrir un shell avec Sudo su
etc.) et/ou simplement ajouter 2>/dev/null
à la commande de recherche.
-name '*.py'
depuis -name
accepte un motif.
Attention aux guillemets simples.
Sudo find / -name "*.py"
Vous avez uniquement besoin de Sudo
pour éviter Permission denied
s (puisque vous effectuez une recherche à partir de la racine).