如何在GCS同存储桶内保留原目录层级仅迁移所有.py文件
GCS 同存储桶 Python 文件层级迁移实现方案
方案一:gsutil 命令行实现(无需写代码,效率最高)
提前安装好 Google Cloud SDK 并完成账号认证后,直接执行对应命令即可:
1. 仅复制.py文件到目标目录(源目录文件保留)
使用rsync命令自动匹配文件并保留原有目录结构:
gsutil -m rsync -r \ --include='*/' \ --include='*.py' \ --exclude='*' \ gs://<替换为你的存储桶名>/FOLDER_A/ \ gs://<替换为你的存储桶名>/FOLDER_B/
参数说明:
-m:开启多线程操作,大幅提升大批量文件迁移速度-r:递归遍历所有子目录- 过滤规则顺序为先包含所有子目录(保证rsync能遍历到深层的.py文件),再包含所有.py后缀的文件,最后排除所有其他类型文件
- 首次执行可加
-n参数做试运行,只会输出待操作的文件列表,不会实际执行迁移,确认匹配的文件正确后再去掉-n正式运行
2. 完全迁移(源目录的.py文件执行后删除)
先执行上面的复制命令,确认文件都同步到FOLDER_B后,执行以下命令删除源目录下的所有.py文件:
gsutil -m rm gs://<替换为你的存储桶名>/FOLDER_A/**/*.py
删除操作同样可以先加 -n 参数试运行,确认待删除文件无误后再正式执行。
方案二:Python 脚本实现(适合需要自定义逻辑的场景)
如果需要做额外的逻辑判断、日志记录等操作,可以用Google Cloud官方的Python SDK实现:
1. 先安装依赖
pip install google-cloud-storage
2. 迁移脚本示例
from google.cloud import storage def migrate_py_files(bucket_name, source_prefix="FOLDER_A/", target_prefix="FOLDER_B/"): # 初始化GCS客户端,提前通过gcloud auth application-default login完成认证 storage_client = storage.Client() bucket = storage_client.bucket(bucket_name) # 遍历源目录下所有文件 for blob in bucket.list_blobs(prefix=source_prefix): # 只处理.py后缀的文件 if blob.name.endswith(".py"): # 替换路径前缀得到目标路径 target_blob_name = blob.name.replace(source_prefix, target_prefix, 1) target_blob = bucket.blob(target_blob_name) # 同桶内直接复制 target_blob.copy_from(blob) # 如果需要完全迁移(删除源文件),取消注释下面一行 # blob.delete() print(f"已迁移:{blob.name} -> {target_blob_name}") if __name__ == "__main__": # 替换为你的存储桶名称 migrate_py_files(bucket_name="你的存储桶名")
注意事项
- 操作前建议先开启存储桶版本控制或对数据做备份,避免误操作导致数据丢失
- 同存储桶同区域内的文件迁移不会产生外网流量,仅会产生极少量的操作费用
- 大批量文件迁移建议优先使用gsutil命令,性能比自行编写的脚本更高
内容的提问来源于stack exchange,提问作者Abhinav Dhiman
相关产品推荐
相关产品推荐

