Wie suche ich nach Textzeichenfolgen in mehreren PHP-Dateien?

Wie suche ich nach Textzeichenfolgen in mehreren PHP-Dateien?

Kurz gesagt, ich habe einen Ordner mit fast 800.000 PHP-Dateien. Ich möchte jede Datei nach einer Zeichenfolge durchsuchen und wenn diese in der Datei vorhanden ist, wird die Datei in ein anderes Verzeichnis kopiert.

Ist dies vom Terminal aus möglich?

Bisher habe ich:

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

Aber das funktioniert offensichtlich nicht. $1 muss der Dateiname sein, der den passenden Text enthält.

Was soll ich machen?

Antwort1

Sie können eine For-Schleife verwenden und den Rückgabecode von grep testen oder grep -c(Übereinstimmungen zählen) verwenden und prüfen, ob die Anzahl der Übereinstimmungen größer als 1 ist.

z.B

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

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

Antwort2

Das geht ganz einfach mit einem schönen Einzeiler:

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

Einige Kommentare zur Funktionsweise. Die Option -l von Grep druckt nur einen Dateinamen, wenn es eine Übereinstimmung in der Datei gibt, sodass eine Liste der zu kopierenden Dateien erstellt wird. Der Befehl Xargs erstellt für jeden Kopierbefehl einen Befehl und führt ihn aus. Xargs ersetzt das Argument mit dem Namen „source“ durch einen Dateinamen, der von der Standardeingabe gelesen wird. Leerzeichen und andere merkwürdige Zeichen in Dateinamen werden mit den Optionen -Z und -0 behandelt.

verwandte Informationen