Localiza todos os arquivos php cuja primeira ou segunda linha tem mais de N caracteres

1

Eu gostaria de encontrar todos os arquivos php no meu servidor, cuja primeira linha ou segunda linha tem mais de N caracteres.

Gostaria de imprimir o nome do arquivo e o conteúdo da linha encontrado.

Como eu faria isso? Estou pensando em fazer grep, mas não sei como analisar linhas em um arquivo com ele.

    
por Hommer Smith 06.03.2014 / 20:02

2 respostas

0

aqui está uma maneira de fazer isso:

MIN_WIDTH=30

for f in $(find / -iname  '*\.php'); do
  if [ $(head -n 2 "$f" | tail -n 1 | wc -c) -gt $MIN_WIDTH ] || [ $(head -n 1 "$f" | wc -c) -gt $MIN_WIDTH ]; then    
    echo "$f";
  fi
done

aqui está um resumo:

  • pesquise todos os arquivos .php : find / -regex '.*\.php$'
  • obtenha a segunda linha do arquivo e conte o número de caracteres: head -2 "$f" | tail -1 | wc -c
  • obtenha a primeira linha do arquivo e conte o número de chararcters: head -1 "$f" | wc -c
  • compare se cada um é maior que $ MIN_WIDTH: '[$ (…) -gt $ MIN_WIDTH]
  • se um deles for maior que $MIN_WIDTH : if […] | […]
  • imprime o nome do arquivo: echo "$f"
por 06.03.2014 / 21:09
0

Uma variação um pouco menor que a do zmo

find -iname "*.php" -exec grep -HP '.{6,}' {} \; | grep -P '^.+:[12]:'

em que 6 é o número mínimo de caracteres. A opção -H é imprimir o nome do arquivo, mesmo que apenas o arquivo esteja em formato grep (esse é o caso, porque cada arquivo encontrado é agrupado separadamente por meio do operador {} )

    
por 06.03.2014 / 22:43

Tags