如何使用aws cli命令从S3存储桶下载特定数量的文件/对象?

时间:2018-03-20 02:41:49

标签: aws-cli

考虑我只想从存储桶中下载10个文件,我们如何将10作为参数传递。

2 个答案:

答案 0 :(得分:0)

您的用例似乎是:

  • 每30分钟
  • 从Amazon S3下载10个随机文件

据推测,这10个文件不应该是以前下载过的文件。

没有内置的S3功能可以下载随机选择的文件。相反,您需要:

  • 从所需的S3存储桶和可选路径
  • 获取文件列表
  • 随机选择要下载的文件
  • 下载所选文件

这可以通过编程语言(例如Python)轻松完成,您可以在其中获取文件名数组,随机化,然后遍历列表并下载每个文件。

您也可以在shell脚本中调用AWS Command-Line Interface (CLI)获取列表(aws s3 ls)并复制文件(aws s3 cp)。

或者,您可以选择将 ALL 文件同步到本地计算机(aws s3 sync),然后选择要处理的随机本地文件。

尝试以上步骤。如果您遇到困难,请发布您的代码以及您遇到的错误/问题,我们可以提供帮助。

答案 1 :(得分:0)

最简单的方法是创建一个可以每30分钟运行一次的python脚本。我编写了可以完成工作的python代码:

import boto3
import random
s3 = boto3.client('s3')
source=boto3.resource('s3')

keys = []
resp = s3.list_objects_v2(Bucket='bucket_name')
for obj in resp['Contents']:
    keys.append(obj['Key'])

length = len(keys);
for x in range(10):
  hello=random.randint(0,length)
  source.meta.client.download_file('bucket_name', keys[hello] , keys[hello])

在第12行中,您可以传递一个数字作为参数,该参数将定义您要下载的随机文件的数量。此外,如果您希望脚本每30分钟自动执行一次任务,那么您可以将上面的代码定义为单独的方法,然后可以使用" sched" python模块重复调用此方法,您可以在此处找到链接中的代码: What is the best way to repeatedly execute a function every x seconds in Python?