Rekursive Suche nach Dateien, die bestimmten Text enthalten

4

Wie erstelle ich rekursiv eine Textdatei mit einer Liste aller Dateien auf meinem Server, 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, sondern nur eine Liste aller Dateien, die die Zeichenfolge enthalten.

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

Antworten:

7

Verwenden Sie grepanstelle von sed:

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

Aus der Art, wie Sie die Frage formulieren, geht hervor, dass Sie noch nicht allzu vertraut sind grep. Weitere Informationen zu den Optionen finden Sie in der Manpage type: man grepin Ihrer Befehlszeile.

Zum Beantworten eines Kommentars aktualisieren - Fügen Sie die -lOption hinzu, dass nur Dateinamen angezeigt werden. Das -imacht die Suche Groß- und Kleinschreibung. Beides ist mit einem einzigen Strich einfach zu bedienen:grep -il

Doug Harris
quelle
Dies scheint mir nicht nur die Pfade / Dateien zu geben, die den gesuchten String enthalten. Aus irgendeinem Grund erhalte ich auch den Text aus den durchsuchten Dateien.
oshirowanen
1
Ein bisschen über-l
Doug Harris
4

Sie können grep auch alleine verwenden, ohne Folgendes zu finden:

grep -Rli 'old string' /var/www > list_of_files
garyjohn
quelle
1

Sie können 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'
Ben V
quelle
0

Versuchen Sie es mit 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 "ack-grep".

Mark E. Haase
quelle