我想编写以下bash脚本,它使用重命名选项将文件从一个GCS存储桶复制到另一个存储桶。
我的输入文件夹是gs://test-rtt-integration/result/frd/*.orc
,我的目标文件夹是gs://test-rtt-integration/recent_files/frd
复制文件的重命名应该基于gs://test-rtt-integration/complex-files/TAN/recent_files/today/frd
提供的名称完成重命名的副本完成后我需要清理gs://test-rtt-integration/result/frd
我测试了以下命令,但它们无法正常工作
NAME = "$(gsutil ls gs://test-rtt-integration/complex-files/TAN/recent_files/today/frd)"
gsutil mv gs://test-rtt-integration/result/frd/*.orc gs://test-rtt-integration/recent_files/frd/$NAME
gsutil rm -rf gs://test-rtt-integration/result/frd
(应删除所有.orc文件和其他文件)
但这不能正常工作,因为我必须基于/分割NAME并获得最后一次分割,所以如果分割的结果被称为SPLIT
,我必须做gsutil mv gs://test-rtt-integration/result/frd/*.orc gs://test-rtt-integration/recent_files/frd/$SPLIT
有关如何做到这一点的任何想法?
这个问题有点令人困惑。您说要将文件从一个Google云端存储分区移动到另一个,但所有操作都在一个名为test-rtt-integration
的存储分区中进行。
但是,只要您使用命令gsutil ls gs://[BUCKET_NAME]/folder
获取文件位置,例如gs://[BUCKET_NAME]/folder/[FILENAME].orc
,因为gs://[BUCKET_NAME]/folder/
部分对于文件夹中的所有对象总是相同的,只需用null
替换它,你将只得到最后的对象名称为[FILENAME].orc
等。
我不确定这是否正是您正在寻找的,但我自己做了一些编码,并创建了一个bash脚本:
gs://[BUCKET_NAME]/from
bucket文件夹中获取每个对象的名称gs://[BUCKET_NAME]/from
bucket文件夹复制到gs://[BUCKET_NAME]/to/
bucket文件夹gs://[BUCKET_NAME]/from
bucket文件夹中删除所有对象里面有评论解释每个操作如何在细节中工作。如果这不是您正在寻找的,那么您可以了解它的工作原理并以不同的方式实现它,以便更好地适应您。我已经在Google Cloud Shell中测试了这个脚本,它正在运行。 example code can be found in GitHub。