Ich verwende rm
innerhalb eines BASH-Skripts, um viele Dateien zu löschen. Manchmal sind die Dateien nicht vorhanden, sodass viele Fehler gemeldet werden. Ich brauche diese Nachricht nicht. Ich habe die Manpage nach einem Befehl durchsucht, um rm
leise zu machen , aber die einzige Option, die ich gefunden habe, ist -f
, dass aus der Beschreibung "Nicht vorhandene Dateien ignorieren, nie auffordern" die richtige Wahl zu sein scheint, aber der Name nicht zu passen scheint Ich befürchte daher, dass dies unbeabsichtigte Folgen haben könnte.
- Ist die
-f
Option der richtige Weg zum Schweigenrm
? Warum heißt es nicht-q
? - Macht diese Option noch etwas?
Antworten:
Die Hauptanwendung
-f
besteht darin, das Entfernen von Dateien zu erzwingen, die nichtrm
von selbst entfernt werden würden (in einem besonderen Fall werden nicht vorhandene Dateien "entfernt", wodurch die Fehlermeldung unterdrückt wird).Sie können die Fehlermeldung auch einfach mit umleiten
(oder das Äquivalent Ihres Betriebssystems). Sie können den Wert von
$?
unmittelbar nach dem Aufruf überprüfen ,rm
um festzustellen, ob eine Datei tatsächlich entfernt wurde oder nicht.quelle
--f
gilt für GNU Coreutilsrm
, aber nur, weil es sich um eine eindeutige Abkürzung für handelt--force
. Die Kurzform-f
ist klarer und tragbarer.--f
Hier ist nur ein Tippfehler für-f
.2>
?Ja,
-f
ist die am besten geeignete Option dafür.quelle
rm
zurm -i
.-f ist das richtige Flag, aber für den Testoperator nicht rm
Dies stellt sicher, dass die Datei existiert und eine reguläre Datei ist (kein Verzeichnis, Geräteknoten usw.)
quelle
if [ -f "$THEFILE" ]; then rm "$THEFILE"; fi
, wodurch die Schritte zum Testen und Entfernen von Dateien explizit sequentiell ausgeführt werden.test
und entfernen könnterm
. Es gibt keine Möglichkeitrm
, zuvortest
hier auszuführen . Ein Blick vor dem Sprung ist ein häufiger Fehler bei der gleichzeitigen Programmierung. Sie können dem Ergebnis des "Blicks" nicht mehr vertrauen, wenn Sie tatsächlich "springen". Die Lösung hierfür besteht darin, Sperr- oder Atomoperationen zu verwenden. Welches ist genau der Grundrm -f
, warum Sie wollen , was ein Beispiel für Letzteres ist.\rm -f file
wird nie berichten nicht gefunden.quelle
rm
(wie es auf einigen Websites in den frühen 1990er Jahren beliebt war, um zu verhindern, dass Anfänger Inhalte entfernen und dann den Systemadministrator aufrufen, um ihre Dateien zurückzubekommen).&&
während -f es bricht, sobald die Datei nicht gefunden wird.Wenn Sie
rm -f
"irgendetwas anderes" tun,-f
wird--force
in Situationen, in denen Sierm
sonst um Bestätigung gebeten würden, eine stille Entfernung erzwungen ( Abkürzung für ) . Wenn Sie beispielsweise versuchen, eine von Ihnen nicht beschreibbare Datei aus einem von Ihnen beschreibbaren Verzeichnis zu entfernen.quelle
Ich hatte das gleiche Problem für cshell. Die einzige Lösung, die ich hatte, bestand darin, eine Dummy-Datei zu erstellen, die dem Muster vor "rm" in meinem Skript entsprach.
quelle
rm -f
oderrm filename >&/dev/null
?