altes Verzeichnis löschen, neues leeres Verzeichnis erstellen

362
Camille Goudeseune

Mit dem Befehl "single bash" >| foowird eine leere Datei erstellt foo, unabhängig davon, ob sie zuvor nicht leer oder leer war oder fehlt. (Es schlägt fehl, wenn es schreibgeschützt ist oder ein Verzeichnis.)

Gibt es einen ähnlichen Befehl, um ein leeres Verzeichnis zu erstellen? Es sollte funktionieren, wenn das Verzeichnis vorher dort war oder nicht, leer oder nicht . Ungefähr dasselbe wie, rm -rf fooDir; mkdir -p fooDiraber ohne zu verletzen, wiederholen Sie sich nicht. (Es ist akzeptabel zu schlagen, wenn Verzeichnisse oder Dateien schreibgeschützt sind.)

Der Kontext ist ein Skript, das ein Verzeichnis erstellt, in dem die Ausgabe gespeichert wird, aber die Ausgaben aller vorherigen Läufe gelöscht werden.

0

2 Antworten auf die Frage

3
the_ultra_code

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

Ich kann nur sagen, dass Sie nur die zwei separaten Befehle verwenden. Es kann hässlich und "unbequem" sein, aber es ist wahrscheinlich der einzige Weg, dies zu tun.

Danke für die Links. Einer von ihnen brachte mich auf die Idee, Rsync zu verwenden. Camille Goudeseune vor 7 Jahren 0
0
Camille Goudeseune

First, find an empty directory. There's no universal way to do that, but you can either make one, or find a likely candidate with find /var -type d -empty | xargs ls -ltd. For example, on Ubuntu 14, /var/lib/ntpdate has been empty for years. Another safe bet is /etc/ppp/resolv.

Then the single command is rsync -a --delete /var/lib/ntpdate/ fooDir. The trailing slash matters. Unfortunately, without a universal /dev/nullDir, this solution is likely to baffle the newcomer. So if your script has to do this many times, it's worth it to first create /tmp/emptyDir and then use that with rsync.