针对大量文件的最佳 Linux 复制命令

针对大量文件的最佳 Linux 复制命令

这是我找不到明确答案的话题,或者至少找不到一个能很好地解释为什么一个解决方案比另一个更好的答案。假设我有两个本地驱动器,一个有要复制的文件,一个是空的。反馈不是必需的,但最佳性能是必需的,但有一些注意事项。

  1. 从一点向下的文件结构必须一致。例如,文件可能存储在 的x目录中– 但是当我将其复制到 时,我希望它仅从下往上构建。因此结果可能看起来有点像。x/my_drive_a/to_copy/files/x//my_drive_b//files//my_drive_b/files/x/
  2. 每次传输的文件都不会相同,因此像这样的功能rsync可能并不比 这样的功能有优势cp
  3. 尽管文件都很小,但文件数量却有数千个。
  4. 必须复制数据并保留在 上my_drive_a

我最初的想法是简单地做cp -R /my_drive_a/to_copy/files/x/ /my_drive_b/files/x/。同样,由于我对 Linux 中的复制功能经验有限,我不确定这是否是复制如此大量文件的最佳解决方案。

答案1

只需使用 即可cpcoreutils经过了很好的优化,性能出色。 除了 flag 之外,如果您预测没有稀疏文件,--archive请考虑使用。 这将简化操作并节省时间。--sparse=nevercp

为什么不呢rsync?它会尝试分析文件,对它们进行排序(请参阅 中的“已排序的传输顺序” man rsync),并且很难在不严重阻碍整个过程的情况下打印有用的进度信息。虽然它的一些选项可以关闭,但有些选项是强制性的,会导致执行时间变慢。

根据数据的大小,使用或 之/dev/sda类的程序复制整个磁盘(例如)可能会更快,但很难判断此选项何时会更快。ddddrescue

相关内容