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.
Antworten:
Verwenden Sie
grep
anstelle vonsed
: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 grep
in Ihrer Befehlszeile.Zum Beantworten eines Kommentars aktualisieren - Fügen Sie die
-l
Option hinzu, dass nur Dateinamen angezeigt werden. Das-i
macht die Suche Groß- und Kleinschreibung. Beides ist mit einem einzigen Strich einfach zu bedienen:grep -il
quelle
-l
Sie können grep auch alleine verwenden, ohne Folgendes zu finden:
quelle
Sie können versuchen, dem Befehl das Flag -l hinzuzufügen, um nur die Dateinamen aufzulisten
quelle
Versuchen Sie es mit ack - es ist schneller als grep und unterstützt Perl Regex.
Auf einigen Systemen heißt dieses Paket "ack" und manchmal "ack-grep".
quelle