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