Wie unterdrückt man bestimmte Fehlermeldungen im Befehl „Find“?

Wie unterdrückt man bestimmte Fehlermeldungen im Befehl „Find“?

find /var/log/myfile.*.txt -type f

Wenn keine Datei vorhanden ist, die diesem Muster entspricht, erhalte ich Fehlerprotokolle wie No such file or directory.

Frage: wie kann ich nur diese Fehlermeldung verhindern? Ich könnte natürlich 2>/dev/nullam Ende ein hinzufügen, aber das würde alle Fehler unterdrücken. Wie könnte ich die genannte einfach ignorieren?

Denn ich habe einen Cronjob, der periodisch einige Dateien löscht und immer dann Fehler loggt, wenn keine Datei vorhanden war:

@daily find /var/log/myfile.*.txt -mtime +7 -delete

Antwort1

Das Richtige ist in diesem Fall, diese Meldung gar nicht erst auszulösen.

Wenn Sie dies in einer Shell ausführen

find /var/log/myfile.*.txt -type f

/var/log/myfile.*.txtwird von der Shell erweitert; findruft erweiterte Objekte oder Literale ab, /var/log/myfile.*.txtwenn keine Übereinstimmung vorhanden ist. Im letzteren Fall wird ausgelöst No such file or directory.

Sie können zunächst eine Dummy-Datei erstellen: touch '/var/log/myfile.dummy_name.txt'(vgl.Elefant in Kairo). Wirklich elegant ist diese „Lösung“ allerdings nicht.

Eine bessere Lösung besteht darin, finddas Muster handhaben zu lassen:

find /var/log/ -type f -name "myfile.*.txt"

wobei doppelte Anführungszeichen das Globbing in der Shell verhindern (vgl.Das). In diesem Fall *wird es von findselbst gehandhabt, da -namesolche Muster unterstützt werden.

Der obige Ansatz kann jedoch myfile.*.txtinbeliebiges Unterverzeichnisvon /var/log/auch. Wenn Ihr findunterstützt -maxdepth, verwenden Sie es:

find /var/log/ -maxdepth 1 -type f -name "myfile.*.txt"

Wenn nicht, siehe dies:POSIX-Suche auf bestimmte Tiefe beschränken?


Ihr Betriebssystem verwendet wahrscheinlich bereits logrotate(8)Protokolldateien.

In meinem Debian logrotateläuft es täglich wegen /etc/cron.daily/logrotate; in Ubuntu sollte es ähnlich sein. Ich kann eine benutzerdefinierte Konfiguration erstellen /etc/logrotate.d/und auf diese Weise beliebige Protokolldateien verwalten. Betrachten Sie diesen Ansatz.

verwandte Informationen