使用gzip压缩的gsutil rsync

reg*_*low 6 google-cloud-storage gsutil google-cloud-platform

我正在谷歌存储桶中托管公开可用的静态资源,我想使用该gsutil rsync命令将我们的本地版本同步到存储桶,从而节省带宽和时间.我们的构建过程的一部分是预先gzip这些资源,但gsutil rsync无法设置Content-Encoding标头.这意味着我们必须运行gsutil rsync,然后立即运行gsutil setmeta以在所有gzip压缩文件类型上设置标头.这使得存储桶处于BAD状态,直到设置了该标头.另一种选择是使用gsutil cp,传递-z选项,但这需要我们每次都重新上传整个目录结构,这包括大量的图像文件和其他浪费时间和带宽的非压缩资源.

是否有原子方法来完成rsync并设置正确的Content-Encoding标头?

Mik*_*rtz 5

假设您从source-dir中的gzip压缩源文件开始,您可以:

gsutil -h content-encoding:gzip rsync -r source-dir gs://your-bucket
Run Code Online (Sandbox Code Playgroud)

注意:如果执行此操作然后以相反方向运行rsync,它将解压缩并将所有对象复制回来:

gsutil rsync -r gs://your-bucket source-dir 
Run Code Online (Sandbox Code Playgroud)

这可能不是你想要发生的事情.基本上,使用rsync最安全的方法是简单地在源和目标之间按原样同步对象,而不是尝试在对象上设置内容编码.

  • 我们选择不使用rsync命令支持动态压缩,因为正确执行此操作需要跟踪对象元数据中的预压缩大小和校验和,如果客户端尝试执行多重操作,可能会导致混乱的情况源同步.基本上,如果要动态压缩,则需要使用gsutil cp命令. (3认同)