如何用gsutil仅复制存储桶目录内容而非源文件夹本身?
解决Google Cloud存储桶目录内容递归复制问题
当你需要将源目录内部内容直接复制到目标目录,而非复制整个源目录本身时,问题出在命令中没有明确指定要复制源目录下的所有内容。
正确命令
使用通配符*匹配source_dir下的所有文件和子目录,命令如下:
gsutil -m cp -r gs://my_first_bucket/source_dir/* gs://my_second_bucket/target_dir/
为什么之前的命令无效?
- 当你执行
gsutil -m cp -r gs://my_first_bucket/source_dir/ gs://my_second_bucket/target_dir时,gsutil会把source_dir这个目录整体复制到target_dir下,最终形成gs://my_second_bucket/target_dir/source_dir/的结构。 - 去掉末尾
/的效果和带/一致,因为gsutil对目录路径的处理逻辑中,是否带末尾/不影响目录本身的复制行为。
特殊情况处理
如果source_dir下包含隐藏对象(名称以.开头),*通配符可能无法匹配到,此时可以用**进行深度递归匹配所有内容:
gsutil -m cp -r gs://my_first_bucket/source_dir/** gs://my_second_bucket/target_dir/
另外,目标路径末尾务必保留/,这样gsutil会自动创建target_dir(如果不存在),并将源内容直接放入该目录;若省略末尾/,gsutil会尝试将源内容复制为一个名为target_dir的单个对象,这显然不符合需求。
内容的提问来源于stack exchange,提问作者Tom3652
相关产品推荐
相关产品推荐

