25

我想将本地目录同步到 Google Cloud Storage 中的存储桶。我想复制远程不存在的本地文件,跳过远程和本地已经存在的文件。这可以用 GSUtil 做到这一点吗?我似乎找不到 GSUtil 的“同步”选项或“不覆盖”。是否可以编写脚本?

我在 Linux (Ubuntu 12.04) 上?

4

3 回答 3

32

gsutil 现在支持 cp 命令上的 noclobber 标志 (-n)。将您的 gsutil 更新到最新版本(使用 gsutil update),然后在执行复制时使用 -n 标志。

此标志将跳过目的地已存在的文件。

于 2012-12-16T09:38:12.333 回答
16

您需要在命令中添加 (-n),在Google Cloud Platform上正式提到:

-n:没有破坏。指定后,目标位置的现有文件或对象将不会被覆盖。任何被此选项跳过的项目都将被报告为被跳过。此选项将在尝试上传数据之前执行额外的 GET 请求以检查项目是否存在。这将节省重传数据,但额外的 HTTP 请求可能会使小对象传输更慢且更昂贵。

示例(使用多线程):

gsutil -m cp -n -a public-read -R large_folder gs://bucket_name
于 2015-06-24T07:05:20.997 回答
10

使用rsync,您可以复制丢失/修改的文件/对象:

gsutil -m rsync -r <local_folderpath> gs://<bucket_id>/<cloud_folderpath>

此外,如果您使用该-d选项,您还将删除存储桶中不再存在于本地的文件/对象。

另一种选择可能是使用Object Versioning,因此您将使用本地数据替换存储桶中的文件/对象,但您始终可以返回到以前的版本。

于 2017-11-28T04:44:10.250 回答