如何在文件列表上使用 gsutil rsync

问题描述

假设一个配置文件在 Google Cloud Storage 中用新行分隔了一组文件夹(不能使用完整的目录列表(太大)),如下所示:

gs://databucket/path/to/dir/441738
gs://databucket/path/to/dir/441739
gs://databucket/path/to/dir/441740

如何在 bash 脚本中使用 gsutil 递归同步文件,同时删除存储桶中不存在的目标文件夹中的文件

我尝试在 bash 脚本中使用以下内容

cat ${1} | gsutil -m rsync -r -d ${2}

之后我收到错误代码 126

其中 ${1} 引用上述配置文件${2} 引用配置文件列表中的每个文件夹要同步到的目标文件夹。 这适用于 gsutil cp 但是 rsync 更高效/有效地满足我的需求。

cat ${1} | gsutil -m cp -R -I ${2}

如何才能做到这一点? 谢谢

解决方法

如您所知,rsync 不支持函数使用 stdin 之类的 -I 标志...

所以你必须使用与 cp 不同的方法。

如果您想在单个命令中同步多个文件夹,请编写每行具有 rsync 命令的批处理脚本,如下所示。

gsutil -m rsync -r -d gs://databucket/path/to/dir/441738 *destination_folder1*
gsutil -m rsync -r -d gs://databucket/path/to/dir/441739 *destination_folder2*
gsutil -m rsync -r -d gs://databucket/path/to/dir/441740 *destination_folder3*

并运行您编写的脚本文件。

这个方法有点麻烦,但是可以达到你想要的效果。