问题描述
假设一个配置文件在 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}
其中 ${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*
并运行您编写的脚本文件。
这个方法有点麻烦,但是可以达到你想要的效果。