Saya menggunakan terminal untuk menyalin file dari satu drive ke drive lain.
sudo mv -vi /location/to/drive1/ /location/to/drive2/
Namun itu tiba-tiba berhenti, sementara beberapa jam masuk, dan tanpa kesalahan, setelah membuat direktori.
Solusi saya sendiri untuk itu sering campuran hashing dan membandingkan yang sebagian besar merupakan kekacauan memakan waktu karena sekarang saya harus memulihkan dari salinan perantara tanpa benar-benar mengetahui file mana yang hilang (ditulis sebagai liner yang sangat panjang untuk zsh - perhatikan bahwa skrip ini tidak berfungsi dalam bash seperti yang ditulis):
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; ) )
Ini rawan kesalahan jika direktori target nama atau sumber_direktori adalah bagian dari jalur, dan hapus file jika belum dipindahkan karena ditandai sebagai duplikat. Juga tidak pada akhirnya direktori sumber.
Apakah ada praktik terbaik bagaimana memulihkan dari mv terganggu?
--delete-during receiver deletes during the transfer
dan juga beberapa alternatif lain yang berguna: --delete --delete-before --delete-delay --delete-after --delete-excluded
. Jadi, ya, rsync adalah alternatif terbaik,
mv
pekerjaan perintah yang sama ? Mungkin *
ditambahkan ke jalur sumber jika sumber aslinya adalah direktori.
rsync --delete*
akan menjadi bencana ! Ini akan menghapus hal-hal dari dest
yang saat ini tidak ada src
, sehingga semua file yang berhasil dipindahkan dalam upaya sebelumnya sekarang akan dihapus! Anda mungkin berpikir rsync --remove-source-files
bahwa saya setuju akan menjadi alternatif yang baik. ( selengkapnya1 , lebih2 )
rsync --delete
akan menghapus file lain yang bukan bagian dari sumber. Dari [man rsync] () * hapus file-file asing dari direktori tujuan *. Pahami apa artinya asing : Tidak disinkronkan. Dan ya, rsync juga menyediakan cara untuk menghapus file sumber setelah ditransmisikan dengan benar.
cmp
bukannya hashing. Ini memiliki ketergantungan, dan masalah yang sama denganwhile read
yang disebutkan Gilles. Ini juga lambat dan bertele-tele. Tapi itu membebaskan ruang disk lebih cepat daripada metode rsync, karena file (kembali) dipindahkan dari sumber saat dijalankan. Ini bisa menjadi inspirasi bagi mereka yang berani.