Google 云存储:gsutil cp -n 不 "skip existing" 或显示正在上传的文件

Google cloud storage: gsutil cp -n doesn't "skip existing" or display files being uploaded

恢复上传时(已经有大约 2GB,从 40Gb 的 7,000 个文件中上传了 2,000 个文件)cp 不会像以前一样显示 "skipping existing files" 的列表。此外,gsutil 消息 [xx/7.3k files][xx MiB/ 40GiB] 不会从停止时离开的地方开始(ei:[2k/7.3k files][2GiB/ 40GiB]),而是从头开始:[00/7.3k files][00 MiB/ 40GiB]

我检查了 https://console.cloud.google.com/storage/browser 上的上传:没有什么奇怪的,正在上传新文件,昨天发送的文件还在。那为什么gsutil不说网上已经有2GiB和2k的文件了?

此外,cp 命令不会像以前那样显示当前正在上传的文件。知道为什么吗? (虽然 rsync 可以)

这是我的cp命令gsutil -m cp -r -n "MyLocalFolder" gs://my_bucket/Backup 我也没有修改我的本地文件夹,也没有修改它包含的文件。


我 运行 遇到的另一个问题是 -m rsync -r 命令试图上传已经存在的文件而不是跳过它们。为了进行调试,我在 cprsync 命令之间切换了几次,而 rsync 没有完全考虑到 cp 命令已经上传的内容:它不断上传现有的文件。那么 cprsync 是否有不同的校验和?如果不是,如何解释这种行为?

第二个问题的解决方法: 事实上,我对 cp 和 rsync 使用了相同的目标,但构建方式不同: 如果 cp 命令是 gsutil -m cp -r -n "MyLocalFolder" gs://my_bucket/Backup 那么 rsync 命令是 gsutil -m rsync -r "MyLocalFolder" gs://my_bucket/Backup/MyLocalFolder

gsutil cp -n 仍然需要发现它需要上传的本地文件夹中的哪些文件(因为文件夹的内容可能已更改),因此如果您重复该命令并且目标中有一些现有文件bucket,它仍然需要枚举本地文件,即使它要跳过它们。这就是为什么它不以 [2k / 7.3k files] [2GiB / 40GiB] .

这样的开头

不过,对于已经存在的项目,它仍应输出“Skipping existing item”。

rsync 使用与 cp 相同的校验和逻辑,因此我怀疑您没有将文件上传到完全相同的目的地。

gsutil 4.21 版更改了 cprsync 命令以显示摘要信息,而不是每个文件的单独进度打印,这往往会打印大量信息终端,特别是当使用 -m 标志时。