Frage Rekursive Suche nach Dateien, die einen bestimmten Text enthalten


Wie erstelle ich rekursiv eine Textdatei, die eine Liste aller Dateien auf meinem Server enthält, die irgendwo in den Dateien eine bestimmte Zeichenfolge enthalten?

Ich weiß, dass der folgende Befehl verwendet werden kann, um eine Zeichenfolge rekursiv zu ersetzen

find /var/www -type f -print0 | xargs -0 sed -i 's/old string/new string/g'

Ich möchte die Zeichenfolge nicht ersetzen, ich möchte nur eine Liste aller Dateien, die die Zeichenfolge enthalten.


4
2018-01-18 14:31


Ursprung


Für einen Windows-Benutzer hätte ich vorgeschlagen, eine Batch-Datei zu schreiben, die die Ausgabe in eine Datei speichert und sie in den Scheduler legt. Versuchen Sie, was auch immer der Linux-Ersatz für diesen Prozess ist - Shekhar


Antworten:


Benutzen grep Anstatt von sed:

find /var/www -type f -print0 | xargs -0 grep -i 'old string'

Wie du die Frage formulierst, scheint es, als ob du noch nicht so vertraut bist grep. Lesen Sie mehr über seine Optionen in seiner man-Seitentyp: man grep an deiner Befehlszeile.

Aktualisieren, um den Kommentar zu beantworten - Versuchen Sie, das hinzuzufügen -l Option, um nur Dateinamen anzuzeigen. Das -i macht die Suche unsensibel. Die einfach zu verwenden beide ist mit einem einzigen Strich: grep -il


7
2018-01-18 14:38



Dies scheint mir nicht nur die Pfade / Dateien zu geben, die die Zeichenfolge enthalten, nach der ich suche. Aus irgendeinem Grund bekomme ich auch den Text aus den Dateien, die ich auch durchsucht habe. - oshirowanen
Hinzugefügt etwas über -l - Doug Harris


Du kannst grep auch alleine ohne find verwenden:

grep -Rli 'old string' /var/www > list_of_files

4
2018-01-18 15:14





Sie könnten versuchen, dem Befehl das Flag -l hinzuzufügen, um nur die Dateinamen aufzulisten

find /var/www -type f -print0 | xargs -0 grep -li 'old string'

1
2018-01-18 14:55





Probiere ack - es ist schneller als grep und unterstützt Perl Regex.

ack -la <pattern> /var/www

Auf einigen Systemen heißt dieses Paket "ack" und manchmal auch "ack-grep".


0
2018-03-04 05:10