根据文件名将 Google Cloud 存储桶中的多个文件复制到不同的目录
Posted
技术标签:
【中文标题】根据文件名将 Google Cloud 存储桶中的多个文件复制到不同的目录【英文标题】:Copying multiple files inside a Google Cloud bucket to different directories based on file name 【发布时间】:2019-10-22 07:55:16 【问题描述】:假设我在不同的子目录中有多个文件,名称如20060630 AD8,11 +1015.WAV
和20050508_Natoa_Enc1_AD5AK_1.WAV
。现在我知道所有这些文件都会有一个子字符串,如AD
(在第一个文件中)和AD
、AK
(在第二个文件中)。我在***目录中将这些类(AD
、AK
、AN
等)作为空文件夹创建了总共 16 个。
我想根据匹配的子字符串将所有这些文件复制到它们各自的目录中。现在使用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】:您可以为此编写一个简单的 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 以及类似的通配符策略。
【讨论】:
是否不需要身份验证,因为我将在 Google Colab 上运行它?此外,您的链接缺少“e”。 我不太了解 bash,但该代码不会将所有文件都扔到***目录而不是匹配的子字符串文件夹中吗? 感谢您指出链接错误。它已被修复。该代码会将每个文件复制到存储桶根级别的匹配子目录中。而且我对 Google Colab 并不熟悉,但无论您在何种环境中运行代码,都必须通过您的 GCP 帐户进行身份验证才能在其中执行任何操作。以上是关于根据文件名将 Google Cloud 存储桶中的多个文件复制到不同的目录的主要内容,如果未能解决你的问题,请参考以下文章
需要帮助根据 BigQuery 中的值将 Google Cloud Storage 中的特定 PDF 文件移动到 SFTP
从 Google Cloud Storage Bucket 下载文件夹
Cloud Storage 上的 Google App Engine 文件
我可以从 Google Cloud Storage 工件存储桶中删除容器映像吗?
如何使用 API 存储在 Google Cloud Storage 中的架构文件在 BigQuery 加载作业上设置架构?