Como eu procuro por cadeias de texto em vários arquivos PHP?

2

Longa história curta, eu tenho uma pasta com quase 800.000 arquivos php. Gostaria de pesquisar cada arquivo por uma string e, se ela existir nesse arquivo, o arquivo será copiado para outro diretório.

Isso é possível a partir do terminal?

Até agora eu tenho:

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?

    
por Jarrod 03.02.2011 / 04:07

2 respostas

0

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

por exemplo,

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

    if [ "$?" -eq 0 ]
    then
            cp "$i" mvd
    fi
done
    
por 03.02.2011 / 04:20
1

Você pode fazer isso facilmente com um bom forro:

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

Alguns comentários como isso funciona. A opção -l do Grep imprime apenas um nome de arquivo se houver uma correspondência no arquivo, portanto, produz 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 chamado "source" por um nome de arquivo lido a partir da entrada padrão. Espaços e outros personagens engraçados em nomes de arquivos são tratados com opções -Z e -0.

    
por 03.02.2011 / 10:45