ターミナルを使用して、あるドライブから別のドライブにファイルをコピーしました。
sudo mv -vi /location/to/drive1/ /location/to/drive2/
しかし、ディレクトリを作成した後、数時間、エラーなしで、それは突然停止しました。
それに対する私自身の解決策は、多くの場合、ハッシュと比較の組み合わせです。これは、現在どのファイルが欠落しているかを知らずに中間コピーから回復する必要があるため、ほとんど時間がかかる混乱ですこのスクリプトは、書かれているように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がパスの一部である場合はエラーが発生しやすく、重複としてマークされているために移動されていない場合はファイルを削除します。また、最終的にディレクトリをソースしません。
中断されたMVから回復する方法のベストプラクティスはありますか?
--delete-during receiver deletes during the transfer
、その他の便利な代替手段も提供しています--delete --delete-before --delete-delay --delete-after --delete-excluded
。そのため、はい、rsyncが最良の選択肢です。
mv
コマンドを繰り返すだけでは機能しないのはなぜですか?*
元のソースがディレクトリである場合、おそらくソースパスに追加されます。
rsync --delete*
なるのではないかと心配です!現在にないものを削除するため、前回の試行で正常に移動されたすべてのファイルが削除されます!あなたはおそらく、私が良い選択肢になると思うことを考えていました。(more1、more2)dest
src
rsync --remove-source-files
rsync --delete
ますのみ削除し、他のソースの一部ではないファイルを。[man rsync]()*からdest dirs *から無関係なファイルを削除します。無関係の意味を理解する:同期されていない。はい、rsync は、ソースファイルが正しく送信された後に削除する方法も提供します。
cmp
代わりにハッシュのを。依存関係があり、while read
Gillesが言及したのと同じ問題があります。また、低速で冗長です。ただし、ファイルは実行中にソースから(再)移動されるため、rsyncメソッドよりも早くディスク領域を解放します。それは勇敢な人のインスピレーションとして役立つかもしれません。