Estou tentando executar uma verificação do PEP8 em uma grande árvore de origem. A árvore é composta de uma mistura de arquivos em vários idiomas. A idéia é verificar todos os scripts Python sem precisar listá-los explicitamente. A maioria desses arquivos não tem .py
extensão. Existe uma maneira simples de encontrar todos os arquivos com a palavra Python no shebang ou encontrar todos os arquivos que seriam executados com o Python quando executados?
shell-script
text-processing
search
Marco Ceppi
fonte
fonte
grep -l
pare de ler um arquivo assim que encontrar uma correspondência, para arquivos sem correspondência, ele lerá o arquivo inteiro. Ele também encontraria correspondências no meio dos arquivos; portanto, poderia corresponder a umshar
arquivo que contém scripts python.Com o GNU, ou FreeBSD ou NetBSD ou OpenBSD (e potencialmente outros)
awk
:Observaria apenas a primeira linha de cada arquivo e executaria o número de
awk
segundos que fosse necessário.A
nextfile
declaração acima não é padrão, mas é encontrada em algumas implementações, incluindo a GNU (que provavelmente é de onde se originou).Embora o código acima pareça funcionar em outras implementações também, a
nextfile
instrução não faria nada lá (seria reconhecida como uma expressão que consiste em umanextfile
variável não definida ), o que significa que todos os arquivos seriam lidos completamente e o nome do arquivo ser impresso para cada linha correspondente.Se os seus
awk
suportesFNR
(como os POSIX awks, mas não o originalawk
, assim como no Solaris/usr/xpg4/bin/awk
e não/usr/bin/awk
) e nãonextfile
, você pode escrevê-lo:O que ainda executaria o mínimo de
awk
s possível, mas leria os arquivos completamente.Outra alternativa para evitar a leitura completa dos arquivos e que funcionaria com todos
awk
e,find
porém, significaria executar umawk
por arquivo:fonte