根据文件名将Google Cloud存储桶中的多个文件复制到不同目录

时间:2019-06-06 19:04:11

标签: google-cloud-platform copy google-cloud-storage bucket gsutil

假设我在不同的子目录中有多个文件,它们的名称分别为20060630 AD8,11 +1015.WAV20050508_Natoa_Enc1_AD5AK_1.WAV。现在,我知道所有这些文件都有一个子字符串,例如AD(在第一个文件中)和ADAK(在第二个文件中)。在顶层目录中,我总共创建了16个类(ADAKAN等)。

我想根据匹配的子字符串将所有这些文件复制到各自的目录中。现在使用gsutil,命令可能会像这样:

gsutil cp gs://bucket/Field/2005/20060630 AD8,11 +1015.WAV gs://bucket/AD/20060630 AD8,11 +1015.WAV

这种方法如何在同一存储桶中自动执行数千个文件的任务?

采用这样的方法是否安全:

if 'AD' in filename:
    gsutil cp gs://bucket/<filename> gs://bucket/AD/<filename>
elif 'AK' in filename:
    gsutil cp gs://bucket/<filename> gs://bucket/AK/<filename>

1 个答案:

答案 0 :(得分:2)

您可以为此编写一个简单的BASH脚本。自gsutil supports wildcards起,代码将非常简单,并且可以递归地潜入子目录中以查找文件。

#!/bin/bash

bucket_name=my-example-bucket
substring_list=(
  AD
  AK
  AN
)

for substring in "${substring_list[@]}"; do
   gsutil cp gs://$bucket_name/**/*$substring* gs://$bucket_name/$substring/
done

我还看到您有一些Python的经验,因此您可以选择使用Python Client for Google Cloud Storage和类似的通配符策略。