1

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

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

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

2 ответа2

0

вот способ сделать это:

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"
0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .