Terminali bir sürücüden diğerine dosya kopyalamak için kullandım.
sudo mv -vi /location/to/drive1/ /location/to/drive2/
Ancak bu, bir dizin oluşturduktan sonra birkaç saat içinde ve bir hata olmadan aniden durdu.
Benim kendi çözümüm genellikle, genellikle hangi dosyaların eksik olduğunu bilmeden bir ara kopyadan kurtarmak zorunda olduğum için çoğunlukla zaman alıcı bir karışıklık olan karma ve karşılaştırmanın bir karışımıdır (zsh için çok uzun bir astar olarak yazılmıştır - bu komut dosyası bash'da yazıldığı gibi çalışmaz):
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; ) )
Bu, hedef dizini veya kaynak_dizini yolun bir parçasıysa ve yinelenen olarak işaretlendikleri için taşınmamışlarsa dosyaları silebilir. Ayrıca sonunda kaynak dizini değil.
Kesilen mv'den nasıl kurtarılacağı en iyi uygulama var mı?
--delete-during receiver deletes during the transfer
ve ayrıca birçok diğer yararlı alternatifleri: --delete --delete-before --delete-delay --delete-after --delete-excluded
. Yani, evet, rsync en iyi alternatif,
mv
komutu tekrarlamak işe yaramıyor? Belki de *
orijinal kaynak bir dizinse kaynak yoluna eklenir.
rsync --delete*
bir felaket olur ! dest
Şu anda içinde olmayan şeyleri kaldıracağından src
, önceki denemede başarıyla taşınan tüm dosyalar şimdi silinecek! Muhtemelen rsync --remove-source-files
hangisinin iyi bir alternatif olacağını kabul ettiğimi düşünüyordunuz . ( more1 , more2 )
rsync --delete
olacak sadece kaldırmak diğer kaynağının parçası olmayan dosyaları. [Man rsync] () * 'den yabancı dosyaları dest dizinlerinden silin *. Yabancı anlamların ne olduğunu anlama: Senkronize edilmeme. Ve evet, rsync ayrıca kaynak dosyaları doğru bir şekilde iletildikten sonra kaldırmak için bir yol sağlar.
cmp
. Bağımlılıkları vewhile read
Gilles'in bahsettiği konularla aynı sorunları var . Aynı zamanda yavaş ve ayrıntılı. Ancak disk alanı rsync yönteminden daha erken boşalır, çünkü dosyalar çalışırken yeniden kaynaktan yeniden taşınır. Cesurlar için ilham kaynağı olabilir.