it-swarm.com.de

Wie entferne ich Zeilen aus einer Ausgabe, die einen bestimmten String enthält?

Ich versuche, die neuesten geänderten Dateien in meinem System zu finden, etwa in den letzten 2 Stunden. Der Befehl, den ich benutze, ist:

Sudo find / -mmin -120 -printf '%[email protected] %p\n' | sort -n | cut -f2- -d" " | more

Der obige Befehl gibt jedoch viele Einträge aus, die die Zeichenfolge /proc enthalten. Gibt es also bessere Möglichkeiten, wie ich diese Zeilen aus der Ausgabe entfernen kann?

Wenn Sie bessere Methoden haben, um mit der obigen Situation umzugehen, schlagen Sie diese bitte vor. Das einzige Kriterium ist, dass die Ausgabe sowohl Dateien als auch Verzeichnisse enthalten sollte.


EDIT: -

Ich habe den obigen Befehl dahingehend geändert, dass er auch Namen mit newline enthält, und dann Arronicals Antwort und Afshin Hamedis Antwort hinzugefügt. Das Endergebnis ist:

Sudo find / ! -path '*/proc*' -type f -mmin -120 -exec ls -al {} \; | grep -v anystring | less
4
Raphael

Sie können grep -v verwenden, um Zeilen zu entfernen, die eine Zeichenfolge enthalten, z. B. '/ proc'. Sie können dies als Pipe zu Ihrem Befehl hinzufügen, um Folgendes auszuführen:

Sudo find / -mmin -120 -printf '%[email protected] %p\n' | grep -v '^/proc' | sort -n | cut -f2- -d" " | more

Da Dateien in /proc/ jedoch vorübergehender Natur sind, werden Sie wahrscheinlich einige Fehler wie erhalten

find: â?~/proc/22232/fdinfo/5â?T: No such file or directory

Sie können dies vermeiden, indem Sie das STDERR des Befehls find mit, /dev/null wie folgt an 2>/dev/null umleiten:

Sudo find / -mmin -120 -printf '%[email protected] %p\n' 2>/dev/null | grep -v '^/proc' | sort -n | cut -f2- -d" " | more

Eine bessere Methode

Anstatt die Ergebnisse zu filtern und Ihre Fehlermeldungen zu beseitigen, können Sie Ihren Befehl find so ändern, dass er niemals in /proc angezeigt wird:

Sudo find / -not -path '/proc/*' -mmin -120 -printf '%[email protected] %p\n' | sort -n | cut -f2- -d" " | more
9
Arronical

Ich würde -Prune für diese Art von Dingen verwenden, z.

find / \( -path /proc -o -path /sys -o -path /run \) -Prune -o -mmin -120 -printf '%[email protected] %p\n'
5
steeldriver

Sie können den Pfad '/ proc' wie folgt ausschließen:

[Sudo] find / ! -path "/proc" ...

um "proc" -Einträge in einer beliebigen Pfadebene auszuschließen, verwenden Sie die folgenden Anweisungen

[Sudo] find / ! -path "*/proc/*" ...
2
αғsнιη