Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python和boto获取s3中包含文件的所有子目录的最佳方法_Python_Python 2.7_Amazon Web Services_Amazon S3_Boto - Fatal编程技术网

使用python和boto获取s3中包含文件的所有子目录的最佳方法

使用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。 我需要复制包含特定文件的所有子目录,最佳方法是什么?该命令不接受通配符 最接近的选项是能够传递前缀和分隔符,这与在特定子目录中查找类似 您需要编写自己的逻辑来确定要复制的对象(不是目录)。如果希望复制整个子目录,代码将需要循环该路径中的每个对象,并分别复制该对象 如果您的要求是“复制包含特定文件的所有子目录”,则需要: 首先列出所有对象 循环遍历对象键(文件名),在键的末尾查找所需的文件名(从最后一个斜杠(/)开始)

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

该命令不接受通配符

最接近的选项是能够传递
前缀
分隔符
,这与在特定子目录中查找类似

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

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

  • 首先列出所有对象
  • 循环遍历对象键(文件名),在键的末尾查找所需的文件名(从最后一个斜杠(
    /
    )开始)
  • 如果找到文件名,请将前缀(每到最后一个斜杠)添加到列表中
  • 对于添加到列表中的每个路径,执行另一个
    list\u objects\u v2()
    将路径作为前缀传递,并为每个对象调用
    copy\u object()
    命令

(您只需一个
list\u objects\u v2()
调用即可实现上述功能,但上述功能在逻辑上更简单。您可以选择。)

S3不支持搜索文件名,而且从技术上讲,它也没有目录(前缀不是目录,S3是平面对象存储)。您将需要迭代bucket中的每个对象,并在客户端执行您自己的筛选。为提高性能,需要注意的是-使用分隔符
/
查询
/
前缀将返回所有顶级对象和前缀,但在服务器端,这必须扫描bucket中的每个对象,使这些类型的请求变慢。