我正在使用 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 无法处理符号链接,它会将每个链接扩展为实际文件或目录。