Ich habe das Terminal verwendet, um Dateien von einem Laufwerk auf ein anderes zu kopieren.
sudo mv -vi /location/to/drive1/ /location/to/drive2/
Dies hörte jedoch nach einigen Stunden ohne Fehler nach dem Erstellen eines Verzeichnisses plötzlich auf.
Meine eigene Lösung dafür ist oft eine Mischung aus Hashing und Vergleichen, was meistens ein zeitaufwändiges Chaos ist, da ich jetzt eine Zwischenkopie wiederherstellen muss, ohne wirklich zu wissen, welche Dateien fehlen (geschrieben als sehr langer Einzeiler für zsh - beachte das Dieses Skript funktioniert nicht in Bash (wie geschrieben):
source_directory="/path/to/source_directory/";
target_directory="/path/to/target_directory/";
while read hash_and_file; do {
echo "${hash_and_file}" | read hash file;
echo "${file}" | sed "s/^/${source_directory}/g" | read copy_from;
echo "${copy_from}" | sed "s/${source_directory}/${target_directory}/g" | read copy_to;
mv -v "${copy_from}" "${copy_to}" | tee -a log;
rm -v "${copy_from}" | tee -a log; };
done <<<$(
comm -23 <( find ${source_directory} -type f -exec sha256sum "{}" \; |
sed "s: ${source_directory}: :g" | sort;
) <( find ${target_directory} -type f -exec sha256sum "{}" \; |
sed "s: ${target_directory}: :g" | sort; ) )
Dies ist fehleranfällig, wenn der Name Zielverzeichnis oder Quellverzeichnis Teil des Pfads ist. Löschen Sie Dateien, wenn sie nicht verschoben wurden, weil sie als Duplikate markiert waren. Außerdem wird am Ende kein Quellverzeichnis erstellt.
Gibt es eine bewährte Methode zum Wiederherstellen von unterbrochenen MV?
--delete-during receiver deletes during the transfer
und auch mehrere andere nützliche Alternativen: --delete --delete-before --delete-delay --delete-after --delete-excluded
. Also, ja, rsync ist die beste Alternative
mv
Befehl zu wiederholen ? Möglicherweise mit *
angefügtem Quellpfad, wenn die ursprüngliche Quelle ein Verzeichnis war.
rsync --delete*
wäre eine Katastrophe ! Es wird entfernen Dinge von dest
denen sind derzeit nicht in src
, so dass alle Dateien , die erfolgreich im vorherigen Versuch verschoben wurden , werden nun gelöscht! Sie haben wahrscheinlich darüber nachgedacht, rsync --remove-source-files
was meiner Meinung nach eine gute Alternative wäre. ( more1 , more2 )
rsync --delete
wird nur entfernen andere Dateien , die nicht Teil der Quelle sind. Von [man rsync] () * Löschen Sie nicht benötigte Dateien aus den Zielverzeichnissen *. Verstehen Sie, was Fremdes bedeutet: Nicht synchronisiert werden. Und ja, rsync bietet auch die Möglichkeit, Quelldateien nach der korrekten Übertragung zu entfernen.
cmp
anstelle von Hashing verwendet wird. Es hat Abhängigkeiten und die gleichen Problemewhile read
wie Gilles. Es ist auch langsam und wortreich. Es wird jedoch schneller als mit der rsync-Methode Speicherplatz freigegeben, da Dateien während der Ausführung (erneut) aus dem Quellcode verschoben werden. Es kann als Inspiration für die Mutigen dienen.