J'essaie d'exécuter une vérification PEP8 contre une grande arborescence source. L'arbre est composé d'un mélange de fichiers dans différentes langues. L'idée est de vérifier tous les scripts Python sans avoir à les lister explicitement. La majorité de ces fichiers n'ont pas réellement d' .py
extension. Existe-t-il un moyen simple de trouver tous les fichiers contenant le mot Python dans le shebang ou de trouver tous les fichiers qui seraient exécutés avec Python lors de leur exécution?
shell-script
text-processing
search
Marco Ceppi
la source
la source
grep -l
s'il arrête de lire un fichier dès qu'il trouve une correspondance, pour les fichiers sans correspondance, il lit l'intégralité du fichier. Il trouverait également des correspondances au milieu des fichiers, donc par exemple, il pourrait correspondre à unshar
fichier contenant des scripts python.Avec GNU, ou FreeBSD ou NetBSD ou OpenBSD (et éventuellement d'autres)
awk
:Ne regarderait que la première ligne de chaque fichier et exécuterait aussi peu
awk
que nécessaire.La
nextfile
déclaration ci-dessus n'est pas standard mais se trouve dans quelques implémentations, y compris GNU (qui est probablement d'où elle provient).Bien que le code ci-dessus semble également fonctionner dans d'autres implémentations, l'
nextfile
instruction n'y ferait rien (serait reconnue comme une expression consistant en unenextfile
variable non définie ), ce qui signifierait que tous les fichiers seraient lus entièrement et que le nom de fichier serait être imprimé pour chaque ligne correspondante.Si vos
awk
supportsFNR
(comme les awks POSIX le font mais pas l'originalawk
, donc Solaris/usr/xpg4/bin/awk
et non/usr/bin/awk
) et nonnextfile
, vous pouvez l'écrire:Ce qui fonctionnerait toujours aussi peu
awk
que possible mais lirait complètement les fichiers.Une autre alternative pour éviter de lire les fichiers en entier et qui fonctionnerait avec tous
awk
etfind
qui signifierait en exécuter unawk
par fichier serait:la source