Ich habe einen Verzeichnisnamen foo
in ~/Desktop
. Angenommen, ich möchte ein Verzeichnis aus einem Terminal mit demselben Namen und demselben Speicherort erstellen. Als ich es versuchte mkdir
, gab es einen Fehler:
mkdir: cannot create directory `/home/nux/Desktop/foo': File exists
Das macht Sinn, aber ich möchte ersetzen, foo
wenn es existiert. Ich habe durchgesehen, man mkdir
aber es gibt keine Option, die das tut.
Wie überschreibe ich ein foo
Verzeichnis?
Warum gibt es dafür keine mkdir
Option?
foo
wie beim Löschen aller Inhalte davon?mkdir
hat eine-p
Option, die ignoriert, ob das Verzeichnis existiert.Antworten:
Wenn Ihr Ziel darin besteht, einen einzeiligen Befehl auszuführen, der:
~/Desktop/foo
es neu, falls es bereits vorhanden ist.~/Desktop/foo
wenn es noch nicht vorhanden ist.Dann können Sie verwenden:
;
entspricht einer neuen Zeile, ermöglicht jedoch die Ausführung mehrerer Befehle in einer einzelnen Zeile (dh als "einzelner Befehl").-f
Flag, um sie zu entfernen, ohne den Benutzer interaktiv dazu aufzufordern . Das ist in Ordnung, aber ich empfehle besonders vorsichtig zu seinrm -rf ...
. Sieheman rm
für Details.rm
Befehl beenden, bevor dermkdir
Befehl ausgeführt wird. Dies ist der Grund,;
anstatt zu verwenden&
. (Ein vorhergehender Befehl wird&
asynchron im Hintergrund ausgeführt.)mkdir
Befehl ausführen, wenn derrm
Befehl erfolgreich ist. Dies ist der Grund,;
anstatt zu verwenden||
.mkdir
Befehl ausführen, wenn derrm
Befehl fehlschlägt (normalerweise bedeutet ein Fehler, dass das Verzeichnis noch nicht vorhanden ist). Dies ist der Grund,;
anstatt zu verwenden&&
.rm
Befehl schlägt möglicherweise auch dann fehl, wenn das Verzeichnis bereits vorhanden ist. In diesem Fall schlägt dermkdir
Befehl ebenfalls fehl. Die Fehlermeldungen sind jedoch sinnvoll, und es ist wahrscheinlich nicht erforderlich, einen mittleren Schritt hinzuzufügen, umfoo
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 .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, darm
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 vonrm
Befehlen vorsichtig sein müssen ).quelle
Nein, es gibt keinen einzigen Befehl, um das zu tun, was Sie verlangen.
Warum?
In diesem Fall machen die Befehle
mkdir
undrm
das, was Sie benötigen, und arbeiten gut zusammen, darm -r
auch das Verzeichnis gelöscht wird, sodass ein nachfolgendesmkdir
Verzeichnis erstellt wird.1 Die Kunst der Unix-Programmierung , Eric S. Raymond, zitiert selbst Doug McIlroy.
quelle
Der Befehl zum Entfernen eines Verzeichnisses lautet
rm
. Sie benötigen also 2 Befehle.Wie in den Kommentaren gezeigt, können Sie sie mit
;
(= beides tun, auch wenn das erste fehlschlägt) oder&&
(= nur mkdir, wenn das rm nicht ausfällt) verketten.Das
-r
dient zum Entfernen von Verzeichnissen. Der 1. Befehl entfernt auch ALLE Inhalte des Verzeichnisses. Wenn dies NICHT Ihre Absicht ist, sind sowohl rm als auch mkdir nicht das, wonach Sie suchen: Berechtigungen sindchmod
undchown
.Mehrdeutigkeit.
mkdir
bedeutet Verzeichnis erstellen. Nicht entfernen und Verzeichnis erstellen. Und da derrm
Befehl zum Löschen von Inhalten dient, muss keinrmdir
Verzeichnis entfernt werden können.quelle
Um das so sauber wie möglich zu machen, benutze ich Folgendes:
Und um es zu benutzen:
Dadurch wird sichergestellt, dass Sie ein Verzeichnis und keine Datei entfernen möchten:
-d
Überprüfen Sie, ob bereits ein Verzeichnis mit diesem Namen vorhanden ist. Wenn ja, löschen Sie es.-f
Stellen Sie sicher, dass keine Datei mit diesem Namen vorhanden ist. Wenn ja, drucken Sie die Fehlermeldung und beenden Sie das Programm.Erstellen Sie das neue Verzeichnis und geben Sie den Erfolg zurück. Wenn dies fehlschlägt, ist das Echo fehlgeschlagen.
quelle