这些命令(`tar`)实际上做了什么?有没有更好的办法?

Bel*_*dez 5 linux bash tar

我正在阅读一些有关创建发行版存储库的文档。但是,我无法准确理解这些命令的作用:

# cd /mnt/
# ls
centos-1  centos-2  centos-3
# for i in 1 2 3 
> do
> cd /mnt/centos-$i
> tar cpf - . | ( cd /var/ftp/ks/centos/; tar xpf - )
> done
Run Code Online (Sandbox Code Playgroud)

我的(显然不正确)它的纲要是:遍历每个已安装的 CD ( /mnt/centos-<index>) 并创建一个tar保留权限的文件夹。然后,tar再次将该文件提取到另一个文件夹,保留权限。

如果是这样,为什么要这样做?真的没有更好的办法吗?或者也许我错过了整个想法。

Ign*_*ams 8

在此过程中推荐使用 tar(或 cpio)而不是 cp 的原因在于工具的运行方式。

cp 依次对每个文件对象进行操作,从磁盘读取它,然后将其写入新位置。由于源和目标的位置在磁盘上可能并不接近,这会导致在位置之间进行大量搜索。

tar 和 cpio 尽量一口气读完,然后写入存档。这意味着源文件将一个接一个地读取,而目标文件将一个接一个地写入(当然允许进程切换),从而减少了查找,从而减少了花费的时间。

  • 考虑到所有正在进行的缓冲,`cp` 和 `tar` 的操作基本相同:读取一些东西直到 RAM 几乎饱和,然后写入一些东西,并重复。您是否有基准测试表明 tar 比 cp 具有显着的速度优势? (3认同)