使用python和boto获取s3中包含文件的所有子目录的最佳方法
有没有办法在s3中对bucket进行通配符搜索?使用python和boto。 我需要复制包含特定文件的所有子目录,最佳方法是什么?该命令不接受通配符 最接近的选项是能够传递使用python和boto获取s3中包含文件的所有子目录的最佳方法,python,python-2.7,amazon-web-services,amazon-s3,boto,Python,Python 2.7,Amazon Web Services,Amazon S3,Boto,有没有办法在s3中对bucket进行通配符搜索?使用python和boto。 我需要复制包含特定文件的所有子目录,最佳方法是什么?该命令不接受通配符 最接近的选项是能够传递前缀和分隔符,这与在特定子目录中查找类似 您需要编写自己的逻辑来确定要复制的对象(不是目录)。如果希望复制整个子目录,代码将需要循环该路径中的每个对象,并分别复制该对象 如果您的要求是“复制包含特定文件的所有子目录”,则需要: 首先列出所有对象 循环遍历对象键(文件名),在键的末尾查找所需的文件名(从最后一个斜杠(/)开始)
前缀
和分隔符
,这与在特定子目录中查找类似
您需要编写自己的逻辑来确定要复制的对象(不是目录)。如果希望复制整个子目录,代码将需要循环该路径中的每个对象,并分别复制该对象
如果您的要求是“复制包含特定文件的所有子目录”,则需要:
- 首先列出所有对象
- 循环遍历对象键(文件名),在键的末尾查找所需的文件名(从最后一个斜杠(
)开始)/
- 如果找到文件名,请将前缀(每到最后一个斜杠)添加到列表中
- 对于添加到列表中的每个路径,执行另一个
将路径作为前缀传递,并为每个对象调用list\u objects\u v2()
命令copy\u object()
(您只需一个
list\u objects\u v2()
调用即可实现上述功能,但上述功能在逻辑上更简单。您可以选择。)S3不支持搜索文件名,而且从技术上讲,它也没有目录(前缀不是目录,S3是平面对象存储)。您将需要迭代bucket中的每个对象,并在客户端执行您自己的筛选。为提高性能,需要注意的是-使用分隔符/
查询/
前缀将返回所有顶级对象和前缀,但在服务器端,这必须扫描bucket中的每个对象,使这些类型的请求变慢。