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

Posted

技术标签:

【中文标题】如何在文件列表上使用 gsutil rsync【英文标题】:How can one use gsutil rsync on a list of files 【发布时间】:2021-03-29 15:49:11 【问题描述】:

给定一个配置文件,该文件在 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 引用配置文件列表中每个文件夹将被 rsync 到的目标文件夹。 这适用于 gsutil cp 但是 rsync 更有效/更有效地满足我的需求。

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

如何做到这一点? 谢谢

【问题讨论】:

【参考方案1】:

如你所知,rsync 不支持函数使用标准输入,如 -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*

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

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

【讨论】:

以上是关于如何在文件列表上使用 gsutil rsync的主要内容,如果未能解决你的问题,请参考以下文章

在大文件上使用 rsync 的 gsutil int 错误

无论如何要在某个时间戳之后 rsync gsutil 文件?

继续中断 rsync 后 .gstmp 文件上的 gsutil rsync 错误

从谷歌云存储到 s3 的 gsutil rsync 挂在大文件上

为啥 gsutil rsync 会重新下载我们所有的文件?

gsutil rsync 在 gzip/非 gzip 本地/云位置之间同步