rsync
kann mv
mit den folgenden Optionen sehr ähnlich und überlegen zu herkömmlichen Ordnern in verschiebbare Ordner gebracht werden :
rsync -axvvES --remove-source-files source_directory /destination/
Eine Sache, die ich noch nicht zu tun scheint, ist das Entfernen der ursprünglichen Verzeichnisse. Das --remove-source-files
Flag macht genau das, entfernt die Quelldateien, aber nicht auch die Quellverzeichnisse. Ich wünschte, es gäbe auch eine --remove-source-directories
Flagge, aber es gibt keine.
Wie kann ich damit umgehen? Ich nehme an, ich kann nur eine rm -fr
nach dem Umzug ausstellen , aber ich würde es vorziehen, das Verfahren in einem Prozess beizubehalten, anstatt ein Fehlerpotential einzuführen.
mv
?find . -type d -empty | xargs rmdir -p
rsync
Sitzung in eine Liste zu übertragen, die dann nach dem Prozess verarbeitet wird, der sie dann bereinigt ... Hmm.Antworten:
Ich habe keinen Befehl gefunden, der dies auf einmal erledigt, aber da rsync immer noch eine bessere Leistung aufweist als
rm -rf
(insbesondere wenn Sie eine sehr große Anzahl von Verzeichnissen haben), gibt es zwei rsync-Befehle, die einen "Verschieben" ausführen :quelle
Die Verwendung von " rm -rf " hat eine inhärente Race-Bedingung. Sie können nämlich Dateien löschen, die gerade zwischen dem rsync- und dem rm- Aufruf erstellt wurden.
Ich bevorzuge:
Dadurch werden die Verzeichnisse NICHT entfernt, wenn sie nicht leer sind.
quelle
-depth
OSX oder andere hinzufügen müssen .Ich bin in eine ähnliche Situation geraten. Ich wollte vermeiden
rm -rf
, weil ich wusste, dass rsync einige Dateien nicht kopieren konnte, und ich wollte sie nicht verlieren.Um die leeren Verzeichnisse einfach zu löschen, fand ich dieses am bequemsten (von
sourcedir
):quelle
Warum nicht einfach
rm -rf source_directory
nach Ihrem rsync hinzufügen ?Jedes Befehlszeilenprogramm ist (idealerweise) für eine bestimmte Aufgabe ausgelegt, und es liegt an Ihnen, mehrere zusammenzufügen, um komplexere Aufgaben zu erledigen.
quelle
find -depth
. Hätten Sie einen Vorschlag für einen schnellen algorithmischen Ansatz, um auf den Grund des Verzeichnisstapels zu gelangen, mit rsync zu arbeiten, wie Sie bemerken, rm'ing und dann wieder auf den Baum zu treten?