Encontre todos os arquivos php cuja primeira ou segunda linha tenha mais de N caracteres

Encontre todos os arquivos php cuja primeira ou segunda linha tenha mais de N caracteres

Gostaria de encontrar todos os arquivos php no meu servidor cuja primeira ou segunda linha tenha 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 o grep, mas não sei como analisar linhas de um arquivo com ele.

Responder1

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 detalhamento:

  • procure todos .phpos arquivos: find / -regex '.*\.php$'
  • pegue a segunda linha do arquivo e conte o número de caracteres:head -2 "$f" | tail -1 | wc -c
  • pegue a primeira linha do arquivo e conte o número de caracteres:head -1 "$f" | wc -c
  • compare se cada um é maior que $MIN_WIDTH: `[ $(…) -gt $MIN_WIDTH ]
  • se algum deles for maior que $MIN_WIDTH:if […] | […]
  • imprima o nome do arquivo:echo "$f"

Responder2

Uma variante um pouco mais curta que a do zmo

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

onde 6 é o número mínimo de caracteres. A -Hopção é imprimir o nome do arquivo mesmo que apenas o arquivo seja grepado (este é o caso, porque cada arquivo encontrado é grepado separadamente através do {}operador)

informação relacionada