altes Verzeichnis löschen, neues leeres Verzeichnis erstellen

altes Verzeichnis löschen, neues leeres Verzeichnis erstellen

Der einzelne Bash-Befehl >| fooerstellt eine leere Datei foo, unabhängig davon, ob sie zuvor nicht leer, leer oder nicht vorhanden war. (Der Befehl schlägt fehl, wenn sie schreibgeschützt oder ein Verzeichnis war.)

Gibt es einen ähnlichen Einzelbefehl zum Erstellen eines leeren Verzeichnisses? Es sollte funktionieren, wenn das Verzeichnis vorher vorhanden waroder nicht, leeroder nicht. Ungefähr dasselbe wie, rm -rf fooDir; mkdir -p fooDiraber ohne Verstoß gegen „Don't Repeat Yourself“. (Ein Fehler ist akzeptabel, wenn Verzeichnisse oder Dateien schreibgeschützt sind.)

Der Kontext ist ein Skript, das ein Verzeichnis zum Speichern seiner Ausgabe erstellt, aber die Ausgaben aller vorherigen Ausführungen löscht.

Antwort1

Ich glaube, die Antwort lautet: Nein. Es gibt keinen einzigen Befehl für das, wonach Sie fragen,mindestensgemäß diesen beiden Links:

Ich kann nur sagen, verwenden Sie einfach die beiden separaten Befehle. Das mag hässlich und „unpraktisch“ sein, aber es ist zu 99 % die einzige Möglichkeit, es zu tun.

Antwort2

Suchen Sie zunächst ein leeres Verzeichnis. Es gibt keineUniversal-Möglichkeit, dies zu tun, aber Sie können entweder einen erstellen oder einen geeigneten Kandidaten mit finden . Unter Ubuntu 14 ist find /var -type d -empty | xargs ls -ltdbeispielsweise seit Jahren leer. Eine weitere sichere Wette ist ./var/lib/ntpdate/etc/ppp/resolv

Dann lautet der einzige Befehl rsync -a --delete /var/lib/ntpdate/ fooDir. Der abschließende Schrägstrich ist wichtig. Leider /dev/nullDirwird diese Lösung ohne einen universellen den Neuling wahrscheinlich verwirren. Wenn Ihr Skript dies also oft tun muss, lohnt es sich, es zuerst zu erstellen /tmp/emptyDirund dann mit rsync zu verwenden.

verwandte Informationen