为什么 scp 复制的字节数比应复制的多

为什么 scp 复制的字节数比应复制的多

我正在使用 scp 将 Xcode.app 从一台计算机复制到另一台计算机,似乎复制的内容超过了文件大小,并且仍在复制。它有 4.94GB(我没有压缩它),但目标计算机上的 nettop 显示到目前为止已复制了 7430MB,并且它还没有停止。源计算机上的 nettop 没有任何与复制相对应的活动。

我使用的命令

scp -rp [email protected]:/Applications/Xcode.app /Applications/

目标计算机上的 nettop:

ssh.636                                                                                         7662 MiB          21 MiB   178 KiB  2029 KiB  1044 B
tcp4 192.168.16.108:50145<->192.168.16.178:22                    en1     Established        7662 MiB          21 MiB   178 KiB  2029 KiB  1044 B    13.53 ms   512 KiB   128 KiB        BE

知道为什么文件只有 4.94GB,却复制了超过 7GB 吗?源机器和目标机器分别是 iMac 和 Mac mini,通过 wifi 本地网络进行复制。

更新:复制完成,当我在目标机器上检查 Xcode 的大小时,它有 10.07GB 之大。我不明白 Xcode 在复制过程中怎么会变大一倍。我唯一的理论是 .app 目录已经压缩,而 scp 会解压它们。

干杯!

答案1

这是一个页面描述 SCP 协议的工作原理。值得注意的是,它只能传输文件和目录;协议不支持符号链接。事实上,SCP 会将每个符号链接视为实际文件或目录。

根据操作系统,我的 Xcode.app 副本为 4,936,956,797 字节,并且寻找告诉我它有 7,499 个符号链接。我们可以欺骗SCP假装复制 Xcode.app,以查看它写入了多少数据:

$ scp -rf Xcode.app < /dev/zero | wc -c
 8746268376

我们也可以这样做柏油

$ tar cf - Xcode.app | wc -c
 5018552320

Tar 可以处理符号链接,因此它写入的数据仅比目录结构中实际写入的数据多一点。Scp 无法处理符号链接,它会将每个链接扩展为实际文件或目录。

相关内容