You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Amazon S3嵌套文件夹复制为扁平化目录结构?

不需要编写完整的自定义脚本,用现有工具即可实现需求,你之前写的命令无法运行是两个原因:一是AWS CLI原生不支持直接在S3前缀路径中用通配符做层级匹配展开,二是你写的---include多打了一个横杠,属于参数格式错误。

方案1:单条轻量Shell命令实现(无需独立脚本文件)

直接在终端运行以下命令即可:

aws s3 ls s3://accounts/ --recursive | grep '/docs/' | awk '{print $4}' | while read obj; do
  # 裁剪掉前两层路径 /accounts/account-abc/ 部分
  new_path=$(echo "$obj" | sed 's|^[^/]*/[^/]*/||')
  aws s3 cp "s3://accounts/$obj" "s3://docs/$new_path"
done

注意事项:

  • 正式执行前,可以把aws s3 cp替换成echo,先打印所有匹配到的源路径和目标路径,确认规则符合预期再执行,避免误操作
  • 如果需要保留源文件,用cp即可;如果要把源文件从原路径删除直接移动,把cp改成mv就行
  • 如果文件量超过10万,建议加xargs做并行处理提升速度

方案2:单命令实现(需安装s5cmd工具)

如果你可以安装开源S3操作工具s5cmd,直接用通配符捕获变量即可一步完成:

s5cmd cp 's3://accounts/*/docs/*' 's3://docs/#2/'

命令里的#2对应前面路径中第二个*匹配到的内容,也就是docs/之后的路径部分,自动完成路径裁剪。

内容的提问来源于stack exchange,提问作者Mark Robson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 18:54:03