Ich habe ein Bash-Skript, mit dem ich Dateien aus verschiedenen Verzeichnissen entfernen möchte. Oft werden sie nicht da sein, weil sie nicht generiert wurden und das ist in Ordnung. Gibt es eine Möglichkeit, das Skript dazu zu bringen, diesen Fehler nicht zu melden, aber wenn rm eine andere Ausgabe hat, um dies zu melden?
Alternativ gibt es einen besseren Befehl zum Entfernen der Datei, die weniger verrauscht sein wird?
Wenn Ihre Anforderung ist , dass
rm
nicht über fehlende Dateien nicht beschweren, aber dass Sie auch alle wollen andere Ausgabe vonrm
, mein Vorschlag zum ersten Test für die Zieldatei Existenz wäre, und rufen Sie nurrm
( ohne die-f
Flagge) , wenn die Datei tatsächlich vorhanden ist.Wenn Sie
rm -f
eine Datei aufrufen, die beispielsweise keine Schreibrechte für Benutzer hat, wird die Datei entfernt und die normale Eingabeaufforderung für dieses Szenario nicht ausgegeben.Für den Fall, dass Sie dieselbe Idee mit mehreren Dateien verwenden möchten, würde ich eine Funktionsdefinition erstellen, wie zum Beispiel:
Verwenden Sie es wie folgt:
qrm file1 file2-does-not-exist *.txt etc here
quelle
Sie haben angegeben, dass Sie
rm
beim Ausführen des Befehls immer noch andere Ausgaben sehen möchten, diese werden jedoch durch die Verwendung der-f
Option unterdrückt. Sie müssen STDERR nach Ihren Wünschen filtern, was etwas schwierig ist, vorausgesetzt, Sie möchten, dass alles andere angezeigt wird.Sie möchten einen Befehl wie diesen verwenden:
Befehl erklärt:
-f
Das Argument ist, es durchzusetzen und nicht zur Bestätigung oder zu Fehlern aufzufordern3>&1 1>&2 2>&3 3>&-
ist es, STDOUT und STDERR für die Filterung umzuschalten (dazu können Sie hier mehr lesen , wenn Sie möchten| grep -v 'No such file or directory'
filtert die Nachricht heraus, die Sie nicht sehen möchtenWenn Sie Fehlermeldungen nur vollständig unterdrücken möchten, können Sie den folgenden Befehl ausführen:
Dieser Befehl leitet STDERR nach / dev / null um, sodass er beim Ausführen des Befehls nicht angezeigt wird.
quelle
rm
ohne-v
nie Ausgaben zu stdout, nur stderr, also in diesem Fall könnten Sie nur2>&1 | grep
ohne den Tanz, der allgemeiner nützlich ist,Alternativ können Sie den
find
Befehl mit der-delete
Option verwenden. Dies löscht (offensichtlich) nur die Dateien, die es findet, so dass es niemals warnt, wenn keine vorhanden sind. Ein Beispiel könnte sein:Diese durchsucht das
/var/log/triffids/
Verzeichnis und löscht alle Dateien mit dem.log
Suffix, die seit mehr als 30 Tagen nicht mehr geändert wurden.Es ist immer eine gute Idee, diese Befehle zuerst ohne die
-delete
Option auszuführen , um sicherzustellen, dass die erwarteten Dateien gefunden werden.quelle
Aktivieren Sie die Option
--force
(-f
) fürrm
:quelle
Dies ist ein Hack, aber Sie könnten immer
touch
die Datei entfernt werden. Wenn es nicht vorhanden ist, wird es erstellt undrm
kann entfernt werden.quelle
Sie können
-f
nach Belieben die folgenden Befehle verwenden:wird Sie nicht dazu auffordern, und genau das tun, was Sie wollen.
quelle
Es gibt zwei Hauptmöglichkeiten: Wenn Sie die Option -f hinzufügen, wird der Fehler "nicht vorhanden" nicht angezeigt, und zwei: (funktioniert für fast alle Befehle), anstatt nur "thecommand" do "thecommand 2> / dev auszuführen / null "wobei" thecommand "der Befehl ist, den Sie ausführen.
quelle