You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用gsutil rsync仅复制Google Cloud存储桶中的新增文件?

优化GCS桶到打印机热文件夹的同步脚本

核心问题解答

gsutil rsync原生支持增量同步,默认会对比源(GCS存储桶)和目标目录的文件修改时间、大小,仅同步新增或更新的文件,无需通过遍历备份目录逐一对比的低效方式。结合合适参数,就能直接实现「仅复制上次运行后存储桶新增文件」的需求。

优化思路

  1. 用gsutil rsync增量同步GCS桶到中间目录,避免全量同步的性能开销;
  2. 用高效的目录对比工具(robocopy)替代原脚本中的for循环,快速筛选新增文件并复制到热文件夹;
  3. 保留备份目录作为已处理文件的记录,避免重复发送已打印的文件。

优化后的脚本

@echo off
SET SOURCE=%1
SET DESTINATION=%2
SET HOTDIR=%3
SET BACKUPDIR=%4

SET GSUTIL_INST_DIR=C:\PRINT
SET GSUTIL=%GSUTIL_INST_DIR%\google-cloud-sdk-386.0.0-windows-x86_64-bundled-python\google-cloud-sdk\bin\gsutil
SET GSUTIL=%GSUTIL% -m

:: 增量同步GCS桶到中间目录:仅同步新增/更新的文件,保留修改时间
call %GSUTIL% rsync -u -t -C %SOURCE%/ %DESTINATION%/

:: 用robocopy高效对比中间目录和热文件夹,仅复制新增文件
robocopy "%DESTINATION%" "%HOTDIR%" /XO /Y /NP
:: /XO: 排除热文件夹已存在的文件(因打印后文件消失,实际仅复制新文件)
:: /Y: 自动覆盖同名文件
:: /NP: 不显示进度,提升执行效率

:: 同步中间目录到备份目录,更新已处理文件记录
robocopy "%DESTINATION%" "%BACKUPDIR%" /MIR

SET CONFIRMATION= "%DATE% %TIME% %SOURCE%  to  %HOTDIR%"

关键参数说明

  • gsutil rsync -u: 仅复制源中比目标新或目标不存在的文件,实现增量同步;
  • gsutil rsync -t: 保留文件的修改时间,确保下次同步时能准确识别新增/更新的文件;
  • robocopy /XO: 高效筛选出热文件夹中没有的文件,替代原脚本中低效的for循环遍历;
  • robocopy /MIR: 镜像同步中间目录到备份目录,确保备份目录与已同步文件完全一致。

额外优化建议

  • 如果GCS桶中的文件不会被删除,可去掉gsutil rsync中的-d参数(原脚本的-d会删除目标目录中源不存在的文件),减少不必要的文件删除操作;
  • 若无需保留中间目录DESTINATION,可直接将GCS桶增量同步到BACKUPDIR,再从BACKUPDIR同步新增文件到HOTDIR,进一步简化流程。

内容的提问来源于stack exchange,提问作者Sajjad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:40:32