在 Linux 中复制大量文件/文件夹,并具有排队和中断和继续的能力

在 Linux 中复制大量文件/文件夹,并具有排队和中断和继续的能力

我正在从 OLD OLD OLD *nix 系统复制 TB 级的数据。我可以花钱购买新硬件来插入驱动器,但我想避免花钱。

系统很糟糕。它经常冻结和崩溃。所以我每次都必须重新启动复制过程。它需要很长时间才能“赶上”,因为它必须“跳过”已经复制的文件。

我可以使用rsync,但系统太慢,每次我开始rsync初始库存扫描/比较都需要一段时间。

于是我想我可以生成一个包含所有需要复制的文件的一次性列表并将它们保存到一个文件中。然后我可以有一个脚本来遍历该文件并复制该文件,然后删除该行。如果脚本/副本在中间失败,我可以从中断处继续。我不知道如何处理/处理将从队列中删除该行的部分,但在试图弄清楚这一点时,我意识到必须有一些公开可用的工具或脚本已经可以满足我的需要。

因此,目标是它会遍历一些文件输入队列来复制它们,并在完成复制时将其从队列中删除。对于这个特定的用例,我不需要它,但它应该能够容纳添加到队列中的新条目。当然,队列应该基于文件,以便在出现系统错误/问题时可以继续。

有人知道其中一个吗?

答案1

虽然建议使用“专业”、经过验证的工具来可靠地完成此任务,但这里有一种快速而肮脏的即时解决方案。由于系统问题,删除文件中的一行可能会失败,因此将成功复制的文件名保留在日志文件中似乎更安全一些。创建一个包含要复制的文件(例如通过重定向ls结果)的“todo”文件和一个空的“log”文件。然后运行

comm -2 -3 todo log |
while read FN
  do echo cp "$FN" "new/path/to/$FN" && echo "$FN" >> log || echo "$FN" >&2
  done 2>>errlog

任何时候运行此命令,都将跳过已复制和记录的文件。您可能需要sort“todo”文件以避免comm“文件未按排序顺序”的警告。

相关内容