我想将本地目录同步到 Google Cloud Storage 中的存储桶。我想复制远程不存在的本地文件,跳过远程和本地已经存在的文件。这可以用 GSUtil 做到这一点吗?我似乎找不到 GSUtil 的“同步”选项或“不覆盖”。是否可以编写脚本?
我在 Linux (Ubuntu 12.04) 上?
我想将本地目录同步到 Google Cloud Storage 中的存储桶。我想复制远程不存在的本地文件,跳过远程和本地已经存在的文件。这可以用 GSUtil 做到这一点吗?我似乎找不到 GSUtil 的“同步”选项或“不覆盖”。是否可以编写脚本?
我在 Linux (Ubuntu 12.04) 上?
gsutil 现在支持 cp 命令上的 noclobber 标志 (-n)。将您的 gsutil 更新到最新版本(使用 gsutil update),然后在执行复制时使用 -n 标志。
此标志将跳过目的地已存在的文件。
您需要在命令中添加 (-n),在Google Cloud Platform上正式提到:
-n:没有破坏。指定后,目标位置的现有文件或对象将不会被覆盖。任何被此选项跳过的项目都将被报告为被跳过。此选项将在尝试上传数据之前执行额外的 GET 请求以检查项目是否存在。这将节省重传数据,但额外的 HTTP 请求可能会使小对象传输更慢且更昂贵。
示例(使用多线程):
gsutil -m cp -n -a public-read -R large_folder gs://bucket_name
使用rsync,您可以复制丢失/修改的文件/对象:
gsutil -m rsync -r <local_folderpath> gs://<bucket_id>/<cloud_folderpath>
此外,如果您使用该-d
选项,您还将删除存储桶中不再存在于本地的文件/对象。
另一种选择可能是使用Object Versioning,因此您将使用本地数据替换存储桶中的文件/对象,但您始终可以返回到以前的版本。