如何使用gsutil通配符删除存储桶中的特定子目录?
解决gsutil通配符删除GCS文件夹时zsh报错的问题
报错原因
zsh会优先尝试将路径中的*或**解析为本地文件系统的匹配项,当本地找不到对应文件时就会抛出no matches found错误,而非把通配符传递给gsutil去匹配GCS存储桶中的路径。
解决方案
方法1:用单引号包裹路径
直接用单引号把GCS路径括起来,阻止zsh解析通配符,让gsutil自行处理云端路径的匹配:
gsutil rm -r 'gs://bucket-name/path/to/**/content'
如果是数千个目录的批量删除场景,建议加上-m选项启用并行操作,大幅提升效率:
gsutil -m rm -r 'gs://bucket-name/path/to/**/content'
方法2:转义通配符
用反斜杠对*进行转义,同样能避免zsh提前解析通配符:
gsutil rm -r gs://bucket-name/path/to/\*\*/content
原理说明
GCS原生支持**递归匹配任意层级目录、*匹配单个层级目录。通过单引号包裹或转义通配符,让shell不干预解析逻辑,gsutil就能正确识别所有path/to/[ID]/content路径并执行删除操作。
内容的提问来源于stack exchange,提问作者Tom3652
相关产品推荐
相关产品推荐

