Google云端存储 - GSUtil - 复制文件,跳过现有文件,不覆盖

问题描述:

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

我在Linux上(Ubuntu 12.04)?

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

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

+6

更新:gsutil现在(2014年5月)支持rsync选项。 – 2014-06-02 01:43:44

gsutil不支持同步操作,但可以使用gsutil ls编写脚本来查找远程存在的文件。

+0

任何想法如何编写脚本? – ECII 2012-07-24 12:43:44

你需要(-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,因此您将使用本地数据替换存储桶中的文件/对象,但您始终可以回到以前的版本。