Vor kurzem musste ich eine große Anzahl von Dateien löschen (über 1 Million) und habe Folgendes gelesen:
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
War eine der optimiertesten Möglichkeiten, das zu tun, und ich kann dafür bürgen, dass es schneller ist als rm -rf
.
Ich bin kein Experte auf diesem Gebiet, aber nach meinem Verständnis hat der Grund für die Leistung von rsync etwas mit der Art und Weise zu tun, wie Dateien aufgelistet werden (LIFO anstelle von FIFO, nehme ich an). Das Problem ist nun, dass ich auch eine große Anzahl von Dateien auf effiziente Weise verschieben muss. Nach einigem Suchen fand ich Folgendes:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination
Während dies alle verschobenen Dateien in löscht ~/source
, bleiben die Verzeichnisse dort. Da ich eine "Round-Robin" -ähnliche Verzeichnisstruktur habe, liegt die Anzahl von files/directories
sehr nahe bei 1, so dass ich gezwungen bin, den ersten Befehl erneut auszuführen, um das Verzeichnis vollständig zu entfernen:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination && \
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
Ein Straight mv
würde praktisch sofort beendet, aber mein ~/destination
Verzeichnis enthält Dateien, die aufbewahrt werden sollten, daher mv
ist dies keine Option. Ich habe die Optionen --prune-empty-dirs
und --force
rsync gefunden, aber keine scheint wie erwartet zu funktionieren:
--force force deletion of directories even if not empty
--prune-empty-dirs prune empty directory chains from the file-list
--remove-source-files sender removes synchronized files (non-dirs)
Gibt es eine Möglichkeit, einen Schritt mit rsync auf einmal nachzuahmen ?