Encuentre todos los archivos php cuya primera o segunda línea tenga más de N caracteres

Encuentre todos los archivos php cuya primera o segunda línea tenga más de N caracteres

Me gustaría encontrar todos los archivos php en mi servidor cuya primera o segunda línea tenga más de N caracteres.

Me gustaría imprimir tanto el nombre del archivo como el contenido de la línea que se encontró.

¿Cómo haría esto? Estoy pensando en hacer grep, pero no sé cómo analizar líneas en un archivo con él.

Respuesta1

aquí tienes una manera de hacerlo:

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

aquí hay un desglose:

  • buscar todos .phplos archivos: find / -regex '.*\.php$'
  • obtenga la segunda línea del archivo y cuente el número de caracteres:head -2 "$f" | tail -1 | wc -c
  • obtenga la primera línea del archivo y cuente el número de caracteres:head -1 "$f" | wc -c
  • compare si cada uno es mayor que $MIN_WIDTH: `[ $(...) -gt $MIN_WIDTH ]
  • si cualquiera de ellos es mayor que $MIN_WIDTH:if […] | […]
  • Imprima el nombre del archivo:echo "$f"

Respuesta2

Una variante algo más corta que la de zmo

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

donde 6 es el número mínimo de caracteres. La -Hopción es imprimir el nombre del archivo incluso si solo se guarda el archivo (este es el caso, porque cada archivo encontrado se guarda por separado a través del {}operador)

información relacionada