我使用终端将文件从一个驱动器复制到另一个驱动器。
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,更多2)
rsync --delete
将只去除其他不属于源的一部分文件。从[man rsync]()*中删除目标目录中的无关文件*。了解无关的含义:不同步。是的,rsync 还提供了一种在正确传输源文件后删除它们的方法。
cmp
了哈希算法。它具有依赖性,并且与while read
Gilles提到的问题相同。它也是缓慢而冗长的。但是,它比rsync方法更快地释放了磁盘空间,因为文件在运行时会从源中(移出)文件。它可以作为勇敢者的灵感。