Как искать текстовые строки в нескольких PHP-файлах?

Как искать текстовые строки в нескольких PHP-файлах?

Короче говоря, у меня есть папка с почти 800 000 php-файлов. Я хотел бы искать строку в каждом файле, и если она есть в этом файле, файл копируется в другой каталог.

Возможно ли это сделать с терминала?

На данный момент я получил:

grep -i -n -r 'ppr-1792' * | cp $1 переместить_туда_сюда

Но это, очевидно, не работает. $1 должно быть именем файла, содержащим соответствующий текст.

Что я должен делать?

решение1

Вы можете использовать цикл for и проверить код возврата grep или использовать grep -c(count matches) и посмотреть, больше ли 1 количество совпадений.

например

for i in *
do
    grep -i -n 'Power' "$i"

    if [ "$?" -eq 0 ]
    then
            cp "$i" mvd
    fi
done

решение2

Это можно легко сделать с помощью одной строчки:

grep -l -i -r -Z pattern | xargs -0 -I source cp source /target

Некоторые комментарии о том, как это работает. Параметр Grep -l выводит только имя файла, если в файле есть совпадение, поэтому он создает список файлов для копирования. Команда Xargs создает команду для каждой команды копирования и выполняет ее. Xargs заменяет аргумент с именем "source" на имя файла, считанное из стандартного ввода. Пробелы и другие забавные символы в именах файлов обрабатываются с помощью параметров -Z и -0.

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