Suchbefehl zum Suchen nach einem bestimmten Ordnernamen und nicht innerhalb des Ergebnisses

Suchbefehl zum Suchen nach einem bestimmten Ordnernamen und nicht innerhalb des Ergebnisses

Ich habe eine Reihe von WordPress-Sites, die in einer Shared-Hosting-Umgebung gehostet werden. Wie bei jeder WordPress-Site gibt es ein „Uploads“-Verzeichnis. Ich möchte regelmäßig nach potenziell schädlichen Dateien suchen, die sich in diesen Ordnern befinden, aber ich möchte dies natürlich nicht einzeln tun.

Die Frage ist also, wie ich alle „Uploads“-Verzeichnisse nach einer Datei mit der Erweiterung „.php“ durchsuchen kann.

Zum Beispiel:

find . -type d -iname "uploads"

bringt mir alle "Uploads"-Ordner in meinem Stammverzeichnis, aber ich möchte auch innerhalb dieser Verzeichnisse suchen

Antwort1

Es ist möglich, die Ausgabe Ihres Befehls an einen anderen weiterzuleiten, Sie können aber auch nach beiden Kriterien gleichzeitig suchen, indem SiegrepUndReguläre Ausdrücke:

find . -type f | grep -i "/uploads/.*\.php$"

Wie es funktioniert:

  • find . -type fListenalleDateien im aktuellen Verzeichnis und seinen Unterverzeichnissen.

  • grep -i "/uploads/.*\.php$"filtert die Ausgabe:

    • -imacht die Suche unabhängig von Groß- und Kleinschreibung

    • /uploads/.*\.php$ist der reguläre Ausdruck, dem eine Zeile entsprechen muss, um angezeigt zu werden

      • /uploads/ phpsind genau das

      • .*ist eine beliebige Anzahl von Vorkommen beliebiger Zeichentypen

      • \.ist eine wörtliche.

      • $signalisiert das Ende der Leitung

Dasselbe Ergebnis erreichen Sie mit

find . -type f -iregex ".*/uploads/.*\.php"

aber die Syntax ist mühsam, wenn Sie reguläre Ausdrücke aus grepPerl, PHP, JavaScript usw. kennen.

verwandte Informationen