Найти все php-файлы, в первой или второй строке которых содержится более N символов.

Найти все php-файлы, в первой или второй строке которых содержится более N символов.

Я хотел бы найти все php-файлы на моем сервере, первая или вторая строка которых содержит более N символов.

Я хотел бы распечатать как имя файла, так и содержимое найденной строки.

Как мне это сделать? Я думаю использовать grep, но не знаю, как с его помощью анализировать строки в файле.

решение1

Вот как это сделать:

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

вот разбивка:

  • поиск всех .phpфайлов: find / -regex '.*\.php$'
  • возьмите вторую строку файла и посчитайте количество символов:head -2 "$f" | tail -1 | wc -c
  • получить первую строку файла и подсчитать количество символов:head -1 "$f" | wc -c
  • сравните, больше ли каждое из них, чем $MIN_WIDTH: `[ $(…) -gt $MIN_WIDTH ]
  • если любой из них больше, чем $MIN_WIDTH:if […] | […]
  • распечатайте имя файла:echo "$f"

решение2

Несколько более короткий вариант, чем у zumo.

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

где 6 — минимальное количество символов. Опция -H— вывести имя файла, даже если grepping выполняется только для одного файла (это так, поскольку каждый найденный файл grepping выполняется отдельно с помощью оператора {})

Связанный контент