
Der einzelne Bash-Befehl >| foo
erstellt 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 fooDir
aber 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:
- https://askubuntu.com/questions/517329/overwrite-an-existing-directory
- https://stackoverflow.com/questions/23698183/wie-man-cp-zwingt-das-überschreiben-eines-verzeichnisses-anstatt-ein-anderes-innerhalb-zu-erzwingen
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 -ltd
beispielsweise 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/nullDir
wird 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/emptyDir
und dann mit rsync zu verwenden.