Я використовував термінал для копіювання файлів з одного диска на інший.
sudo mv -vi /location/to/drive1/ /location/to/drive2/
Однак це раптом зупинилося, в той час, як через декілька годин, і без помилок, після створення каталогу.
Моє власне рішення, це часто поєднання хешування та порівняння, яке, як правило, займає багато часу безладу, тому що мені зараз доводиться відновлюватись з проміжної копії, не знаючи, які файли відсутні (написано як дуже довгий однолінійний файл для zsh - зауважте, що цей сценарій не працює в bash, як написано):
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; ) )
Це схильність до помилок, якщо цільовий каталог імені або source_directory є частиною шляху, і видаляйте файли, якщо вони не були переміщені, оскільки вони були позначені як дублікати. Крім того, він не виводить каталог в підсумку.
Чи є найкраща практика, як відновитись від перерваного МВ?
--delete-during receiver deletes during the transfer
а також ряд інших корисних альтернатив: --delete --delete-before --delete-delay --delete-after --delete-excluded
. Отже, так, rsync - найкраща альтернатива,
mv
командна робота? Можливо, із *
доданим до контуру джерелом, якщо вихідним джерелом був каталог.
rsync --delete*
це стане катастрофою ! Це видалить речі, з dest
яких наразі немає src
, тому всі файли, успішно переміщені в попередній спробі, тепер будуть видалені! Ви, напевно, думали, rsync --remove-source-files
що, я згоден, було б хорошою альтернативою. ( more1 , more2 )
rsync --delete
буде видалено лише інші файли, які не є частиною джерела. З [man rsync] () * видаліть сторонні файли з dest dirs *. Зрозумійте, що означає стороннє : Не синхронізується. І так, rsync також забезпечує спосіб видалення вихідних файлів після їх правильної передачі.
cmp
замість хешування. Він має залежності, і ті ж самі питання,while read
що згадував Гілл. Це також повільно і багатослівно. Але він звільняє простір на диску раніше, ніж метод rsync, оскільки файли (пере) переміщуються з джерела під час його запуску. Це може послужити натхненням для сміливих.