从s3存储桶复制多个文件

DQI*_*DQI 17 amazon-s3 amazon-web-services aws-cli

我无法从AWS S3存储桶下载多个文件到本地计算机.

我有我要下载的所有文件名,我不想要其他人.我怎样才能做到这一点 ?在aws-cli中是否有任何类型的循环我可以进行一些迭代?

我需要下载几百个文件,因此似乎无法使用一个将所有文件名作为参数的命令.

sip*_*uel 17

还可以使用的--recursive选项,如在描述的文档cp命令.它将以递归方式复制指定前缀下的所有对象.例如:

aws s3 cp s3://folder1/folder2/folder3 . --recursive

将获取folder1/folder2/folder3下的所有文件并将它们复制到本地目录.

  • 功能强大,但(明显?)警告要小心使用。AWS 对每次输入/输出文件传输收费。当与“rm”命令结合使用时,请检查语法以避免意外删除! (3认同)

小智 13

有一个bash脚本可以读取文件中的所有文件名filename.txt.

#!/bin/bash  
set -e  
while read line  
do  
  aws s3 cp s3://bucket-name/$line dest-path/  
done <filename.txt
Run Code Online (Sandbox Code Playgroud)

  • 它太慢了,可能是它需要时间来定位这些文件。无论如何,我可以同时发送多个文件请求,并并行定位和下载这些文件吗? (3认同)
  • `set -e 如果命令或管道有错误则停止脚本的执行 - 这与默认 shell 行为相反,默认 shell 行为是忽略脚本中的错误` (2认同)
  • 这将一个接一个地下载文件 - 需要一种并行执行的方法 (2认同)

f.c*_*ani 9

您可能希望使用"sync"而不是"cp".以下内容将仅下载/同步本地文件夹中带有".txt"扩展名的文件:

aws s3 sync --exclude="*" --include="*.txt" s3://mybucket/mysubbucket .
Run Code Online (Sandbox Code Playgroud)

  • 我想使用上面的命令只复制100个文件(例如).有没有一个聪明的方法/参数可以用来做到这一点? (2认同)

小智 7

根据文档,您还可以使用include和进行exclude过滤s3 cp。因此,您可以执行以下操作:

aws s3 cp s3://bucket/folder/ . --recursive --exclude="*" --include="2017-12-20*"
Run Code Online (Sandbox Code Playgroud)

确保你得到的顺序excludeinclude筛选权,可以改变整个含义。

  • 您的最后一行 _“确保您获得排除的顺序并正确包含过滤器,因为这可能会改变整个含义。”_ 特别有用(我将它们颠倒了)。谢谢。 (2认同)

Hug*_*ins 7

尝试了以上所有方法。没有太多的喜悦。最后,将@rajan的回复改编成一句话:

for file in whatever*.txt; do { aws s3 cp $file s3://somewhere/in/my/bucket/; } done
Run Code Online (Sandbox Code Playgroud)


ror*_*noa 5

我想从文本文件中读取 s3 对象键并将它们并行下载到我的机器上。

我用了这个命令

cat <filename>.txt | parallel aws s3 cp {} <output_dir>
Run Code Online (Sandbox Code Playgroud)

我的文本文件的内容如下所示:

s3://bucket-name/file1.wav
s3://bucket-name/file2.wav
s3://bucket-name/file3.wav
Run Code Online (Sandbox Code Playgroud)

请确保文本文件末尾没有空行。您可以在此处了解有关 GNU 并行的更多信息