Como procuro strings de texto em vários arquivos PHP?

Como procuro strings de texto em vários arquivos PHP?

Resumindo, consegui uma pasta com quase 800.000 arquivos php. Gostaria de procurar uma string em cada arquivo e, se existir nesse arquivo, o arquivo será copiado para outro diretório.

Isso é possível a partir do terminal?

Até agora eu consegui:

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

Mas isso obviamente não funciona. $1 precisa ser o nome do arquivo que contém o texto correspondente.

O que devo fazer?

Responder1

Você pode usar um loop for e testar o código de retorno do grep ou usar grep -c(contar correspondências) e ver se a contagem de correspondências é maior que 1.

por exemplo

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

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

Responder2

Você pode fazer isso facilmente com um belo forro:

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

Alguns comentários sobre como funciona. A opção -l do Grep imprime apenas um nome de arquivo se houver uma correspondência no arquivo, produzindo uma lista de arquivos a serem copiados. O comando Xargs constrói um comando para cada comando de cópia e o executa. Xargs substitui o argumento denominado "fonte" por um nome de arquivo lido na entrada padrão. Espaços e outros caracteres engraçados em nomes de arquivos são tratados com as opções -Z e -0.

informação relacionada