Я использовал терминал для копирования файлов с одного диска на другой.
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 *. Понять, что значит постороннее : не синхронизироваться. И да, rsync также предоставляет способ удаления исходных файлов после их правильной передачи.
cmp
вместо хеширования. У него есть зависимости и те же проблемы,while read
о которых упоминал Жиль. Это также медленно и многословно. Но он освобождает дисковое пространство раньше, чем метод rsync, потому что файлы (ре) перемещаются из источника во время его работы. Это может послужить вдохновением для смелых.