通过重命名在GCS下移动文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过重命名在GCS下移动文件相关的知识,希望对你有一定的参考价值。

我想编写以下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

以上是关于通过重命名在GCS下移动文件的主要内容,如果未能解决你的问题,请参考以下文章

Linux下对文件夹和文件重命名、移动和删除

如何使用 java 代码重命名和移动文件而不删除内容

Linux下使用mv重命名文件或者移动文件

linux 下文件重命名/移动/复制命令(转)

将(年份)保存在重命名文件夹中

关于C#实现文件重命名