首页 > 解决方案 > 使用python和boto获取s3中包含文件的所有子目录的最佳方法

问题描述

有没有办法在 s3 中的存储桶上进行通配符搜索?使用python和boto。我需要复制包含特定文件的所有子目录,最好的方法是什么?

标签: pythonpython-2.7amazon-web-servicesamazon-s3boto

解决方案


list_buckets_v2()命令不接受通配符。

最接近的选项是传递一个Prefixand的能力Delimiter,它实际上就像在一个特定的子目录中查找一样。

您将需要编写自己的逻辑来确定要复制哪些对象(不是目录)。如果您希望复制整个子目录,代码将需要遍历该路径中的每个对象并单独复制该对象。

如果您的要求是“复制包含特定文件的所有子目录”,则需要:

  • 通过列出所有对象进行第一遍
  • 遍历对象键(文件名),在键的末尾(从最后一个斜杠 ( /) 开始)查找所需的文件名
  • 如果找到文件名,则将前缀(直到最后一个斜杠)添加到列表中
  • 对于添加到列表中的每个路径,执行另一个list_objects_v2()将路径作为前缀传递,并copy_object()为每个对象调用命令

(您只需一次list_objects_v2()调用即可实现上述目的,但上述方法在逻辑上更简单。您的选择。)


推荐阅读