对于递归复制目录,使用tar
打包目录然后将输出管道输出到另一个tar
解包似乎比使用cp -r
(或cp -a
)快得多。
为什么是这样?为什么不能通过cp
在引擎盖下以相同的方式进行操作来提高速度?
编辑:在尝试复制包含数万个文件和文件夹的巨大目录结构时,我注意到了这种差异,这些目录结构是深度嵌套的,但总共只有 50MB 左右。不确定这是否相关。
小智 7
Cp
在所有文件的循环中执行 open-read-close-open-write-close 。因此,从一个地方读取和写入另一个地方完全交错。Tar|tar
在单独的进程中进行读取和写入,此外tar
使用多个线程“一次”读取(和写入)多个文件,有效地允许磁盘控制器一次获取、缓冲和存储许多数据块。总而言之,tar
允许每个组件高效工作,同时cp
将问题分解为不同的、低效的小块。