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

如何通过通配符匹配目录,从S3下载文本文件且不含父目录?

解决AWS S3下载文件时不保留父目录的问题

你的需求很明确——要下载S3桶里以指定前缀命名的目录下的所有txt文件,但不想把这些文件放在对应的子目录里,直接下载到当前工作目录就行。原来的aws s3 cp命令因为递归下载的特性,会自动保留S3上的目录结构,所以才会出现文件被包裹在父目录里的情况。

这里有两种可行的解决方法,你可以根据自己的场景选择:

方法一:通过脚本逐个下载(推荐,完全扁平化)

这种方法先列出所有符合条件的文件,然后逐个提取文件名,直接下载到当前目录,彻底去掉父目录结构。

运行以下脚本:

aws s3 ls s3://mybucket/ --recursive | grep "mydirectory.*\.txt$" | awk '{print $4}' | while read file_path; do
  # 提取文件名,去掉前面的目录路径
  file_name=$(basename "$file_path")
  # 下载文件到当前目录
  aws s3 cp "s3://mybucket/$file_path" "./$file_name"
done

注意事项:

  • 如果不同目录下有同名的txt文件,后面下载的文件会覆盖前面的,要是担心这个问题,可以修改file_name的生成逻辑,比如把目录前缀也加进去:file_name=$(echo "$file_path" | sed 's/\//_/g'),这样文件名会变成类似mydirectory1_file.txt的形式,避免冲突。
  • 确保你有足够的权限执行aws s3 ls和aws s3 cp操作。

方法二:调整cp命令参数(部分场景适用)

如果你的目标目录下没有子目录(只有一级目录),可以调整--exclude和--include的规则,同时结合--exclude-dir来排除目录本身,但这种方法有一定限制——如果目录里还有更深的子目录,子目录里的txt文件还是会带着子结构下载下来:

aws s3 cp s3://mybucket/ . --recursive --exclude "*" --include "mydirectory*/*.txt" --exclude-dir "mydirectory*"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:04:23