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

Copying multiple files inside a Google Cloud bucket to different directories based on file name

假设我在不同的子目录中有多个文件,名称如 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>

您可以为此编写一个简单的 BASH 脚本。代码会非常简单,因为 gsutil supports wildcards 并且它可以递归地深入 sub-directories 来找到你的文件。

#!/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 以及类似的通配符策略。