Wenn Ihr Ziel darin besteht, einen einzeiligen Befehl auszuführen, der:
- Entfernt das Verzeichnis und erstellt
~/Desktop/foo
es neu, falls es bereits vorhanden ist.
- Erstellt das Verzeichnis nur,
~/Desktop/foo
wenn es noch nicht vorhanden ist.
Dann können Sie verwenden:
rm -r ~/Desktop/foo; mkdir ~/Desktop/foo
;
entspricht einer neuen Zeile, ermöglicht jedoch die Ausführung mehrerer Befehle in einer einzelnen Zeile (dh als "einzelner Befehl").
- Wenn das Verzeichnis, das Sie entfernen, möglicherweise schreibgeschützte Dateien enthält, benötigen Sie das
-f
Flag, um sie zu entfernen, ohne den Benutzer interaktiv dazu aufzufordern . Das ist in Ordnung, aber ich empfehle besonders vorsichtig zu sein rm -rf ...
. Siehe man rm
für Details.
- Sie müssen den
rm
Befehl beenden, bevor der mkdir
Befehl ausgeführt wird. Dies ist der Grund, ;
anstatt zu verwenden &
. (Ein vorhergehender Befehl wird &
asynchron im Hintergrund ausgeführt.)
- Sie müssen den
mkdir
Befehl ausführen, wenn der rm
Befehl erfolgreich ist. Dies ist der Grund, ;
anstatt zu verwenden ||
.
- Sie müssen den
mkdir
Befehl ausführen, wenn der rm
Befehl fehlschlägt (normalerweise bedeutet ein Fehler, dass das Verzeichnis noch nicht vorhanden ist). Dies ist der Grund, ;
anstatt zu verwenden &&
.
- Der
rm
Befehl schlägt möglicherweise auch dann fehl, wenn das Verzeichnis bereits vorhanden ist. In diesem Fall schlägt der mkdir
Befehl ebenfalls fehl. Die Fehlermeldungen sind jedoch sinnvoll, und es ist wahrscheinlich nicht erforderlich, einen mittleren Schritt hinzuzufügen, um foo
die Existenz zu überprüfen , bevor Sie versuchen, ihn zu erstellen.
Siehe 3.2.3 Listen der Befehle in dem Bash - Referenzhandbuch für weitere Informationen und Erklärungen über die ;
, &
, ||
und &&
Betreiber.
Wie von muru vorgeschlagen (und von Rinzwind ausgearbeitet ), empfehle ich Ihnen, zu rsync
prüfen , ob es Ihren Backup-Anforderungen entspricht. Auf der rsync-Dokumentationsseite finden Sie einige zusätzliche nützliche Anleitungen sowie diese Ubuntu-rsync-Anleitung .
Warum hat mkdir diese Option nicht?
mkdir
erstellt Verzeichnisse (das "mk" steht für "make" ). Es wäre auch schlecht, Verzeichnisse und alle darin enthaltenen Dateien rekursiv zu löschen, da dies das Prinzip des geringsten Erstaunens in einer Weise verletzen würde, die wahrscheinlich zu Datenverlust führen würde.
rmdir
entfernt nicht einmal Verzeichnisse, in denen sich Dateien befinden, die keine Verzeichnisse enthalten. rm
hat eine -r
Option, die sinnvoll ist, da rm
erwartet wird, dass Dateien entfernt werden (das ist ihr Zweck, daher ist die inhärente Gefahr intuitiv und Benutzer wissen normalerweise, dass sie beim Ausführen von rm
Befehlen vorsichtig sein müssen ).
foo
wie beim Löschen aller Inhalte davon?mkdir
hat eine-p
Option, die ignoriert, ob das Verzeichnis existiert.