【问题标题】:Google Cloud Storage - GSUtil - Copy files, skip existing, do not overwriteGoogle Cloud Storage - GSUtil - 复制文件,跳过现有文件,不要覆盖
【发布时间】:2012-07-20 10:47:21
【问题描述】:

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

我在 Linux (Ubuntu 12.04) 上?

【问题讨论】:

  • gsutil help cpthe online doc 有点冗长,但完整的文档 gsutil cp -n 可以实现您想要的

标签: linux copy sync google-cloud-storage


【解决方案1】:

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

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

【讨论】:

  • 更新:gsutil 现在(2014 年 5 月)支持 rsync 选项。
【解决方案2】:

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

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

示例(使用多线程):

gsutil -m cp -n -a public-read -R large_folder gs://bucket_name

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-01-21
      • 2015-12-19
      • 2018-11-08
      • 1970-01-01
      • 2015-01-20
      • 2013-10-10
      • 2018-06-15
      • 2021-12-23
      • 2016-08-19
      相关资源
      最近更新 更多