Come posso cercare stringhe di testo in più file PHP?


2

Per farla breve, ho una cartella con quasi 800.000 file php. Vorrei cercare ogni file per una stringa e se esiste in quel file, il file viene copiato in un'altra directory.

È possibile dal terminale?

Finora ho ottenuto:

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

Ma questo ovviamente non funziona. $ 1 deve essere il nome del file che contiene il testo corrispondente.

Cosa dovrei fare?

Risposte:


0

Puoi usare un ciclo for e testare il codice di ritorno di grep, oppure usare grep -c(contare le partite) e vedere se il conteggio delle partite è maggiore di 1.

per esempio

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

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

Grazie. Viene visualizzato l'errore "bash: errore di sintassi vicino al token imprevisto" fi "". Lo sto incollando direttamente nel terminale. È corretto?
Jarrod,

Per sicurezza, dovresti probabilmente citare tutte le variabili; ad esempio: "$ i"
farfromhome

Oh, e hai dimenticato il ; thendopo il (cosa dovrebbe essere)if [ $? -eq 0 ]
farfromhome

scusa, da dove viene il ';' partire? dopo "fatto"?
Jarrod

1
if grep -inqs 'Power' "$i"; then
gravità

1

Puoi farlo facilmente con una bella fodera:

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

Alcuni commenti su come funziona. L'opzione -l di Grep stampa solo il nome di un file se esiste una corrispondenza nel file, quindi produce un elenco di file da copiare. Il comando Xargs crea un comando per ciascun comando di copia ed esegue. Xargs sostituisce l'argomento denominato "source" con un nome file letto dallo standard input. Gli spazi e altri personaggi divertenti nei nomi dei file sono gestiti con le opzioni -Z e -0.


1
+1 Un piccolo miglioramento: usa ack (o ack-grep) invece di grep. Ack è molto più veloce e supporta perl regex.
Mark E. Haase

@mehaase: hai ragione, ack è davvero buono per i file sorgente greping!
JooMing
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.