¿Cómo busco cadenas de texto en varios archivos PHP?

¿Cómo busco cadenas de texto en varios archivos PHP?

En pocas palabras, obtuve una carpeta con casi 800.000 archivos php. Me gustaría buscar una cadena en cada archivo y, si existe en ese archivo, el archivo se copia a otro directorio.

¿Es esto posible desde la terminal?

Hasta ahora obtuve:

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

Pero esto obviamente no funciona. $1 debe ser el nombre del archivo que contiene texto coincidente.

¿Qué tengo que hacer?

Respuesta1

Puede usar un bucle for y probar el código de retorno de grep, o usar grep -c(contar coincidencias) y ver si el recuento de coincidencias es mayor que 1.

p.ej

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

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

Respuesta2

Puedes hacerlo fácilmente con una bonita línea:

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

Algunos comentan cómo funciona. La opción -l de Grep imprime solo un nombre de archivo si hay una coincidencia en el archivo, por lo que produce una lista de archivos para copiar. El comando Xargs construye un comando para cada comando de copia y lo ejecuta. Xargs reemplaza el argumento denominado "fuente" con un nombre de archivo leído desde la entrada estándar. Los espacios y otros caracteres divertidos en los nombres de archivos se manejan con las opciones -Z y -0.

información relacionada