Estoy tratando de ejecutar una verificación PEP8 contra un gran árbol fuente. El árbol está compuesto por una mezcla de archivos en varios idiomas. La idea es verificar todos los scripts de Python sin tener que enumerarlos explícitamente. La mayoría de estos archivos en realidad no tienen una .py
extensión. ¿Hay una manera simple de encontrar todos los archivos con la palabra Python en el shebang o encontrar todos los archivos que se ejecutarían con Python cuando se ejecuten?
shell-script
text-processing
search
Marco Ceppi
fuente
fuente
grep -l
bien dejaría de leer un archivo tan pronto como encuentre una coincidencia, para los archivos sin coincidencia, leería todo el archivo. También encontraría coincidencias en el medio de los archivos, por lo que, por ejemplo, podría coincidir en unshar
archivo que contiene scripts de Python.Con GNU, o FreeBSD o NetBSD u OpenBSD (y potencialmente otros)
awk
:Solo miraría la primera línea de cada archivo y correría tan pocos
awk
como sea necesario.La
nextfile
declaración anterior no es estándar, pero se encuentra en algunas implementaciones, incluida la GNU (que probablemente es de donde se originó).Si bien el código anterior también parece funcionar en otras implementaciones, la
nextfile
declaración no haría nada allí (se reconocería como una expresión que consiste en unanextfile
variable no establecida), por lo que eso significaría que todos los archivos se leerían completamente y el nombre de archivo sería Se imprimirá para cada línea coincidente.Si sus
awk
soportesFNR
(como POSIX awks lo hacen pero no el originalawk
, así que en Solaris/usr/xpg4/bin/awk
y no/usr/bin/awk
) y nonextfile
, puede escribirlo:Que aún se ejecutaría la menor cantidad de
awk
segundos posible, pero leería los archivos por completo.Otra alternativa para evitar leer los archivos por completo y que funcionaría con todos
awk
yfind
significaría ejecutar unoawk
por archivo sería:fuente