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

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

Действительно ли это возможно от терминала?

До сих пор я добрался:

grep-i-n-r 'ppr-1792' * | CP 1$ move_to_here

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

Что мне делать?

2
задан 03.02.2011, 19:40

2 ответа

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

например.

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

    if [ "$?" -eq 0 ]
    then
            cp "$i" mvd
    fi
done
0
ответ дан 12.12.2019, 00:18

Можно сделать это легко с хорошим одним лайнером:

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

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

1
ответ дан 12.12.2019, 00:18

Теги

Похожие вопросы