我无法将多个文件从AWS S3存储桶下载到本地计算机。
我有我要下载的所有文件名,我不想要其他人。我怎样才能做到这一点 ?在aws-cli中是否有任何类型的循环我可以进行一些迭代?
我需要下载几百个文件,因此似乎无法使用一个将所有文件名作为参数的命令。
答案 0 :(得分:12)
也可以使用--recursive
选项,如documentation cp
命令中所述。它将以递归方式复制指定前缀下的所有对象。 E.g:
aws s3 cp s3://folder1/folder2/folder3 . --recursive
将获取folder1 / folder2 / folder3下的所有文件,并将它们复制到本地目录。
答案 1 :(得分:11)
有一个bash脚本可以读取文件filename.txt
中的所有文件名。
#!/bin/bash
set -e
while read line
do
aws s3 cp s3://bucket-name/$line dest-path/
done <filename.txt
答案 2 :(得分:7)
您可能想要使用&#34;同步&#34;而不是&#34; cp&#34;。以下将仅使用&#34; .txt&#34;下载/同步文件。本地文件夹中的扩展程序:
aws s3 sync --exclude="*" --include="*.txt" s3://mybucket/mysubbucket .
答案 3 :(得分:4)
根据doc,您也可以使用include
和exclude
过滤器s3 cp
。所以你可以这样做:
aws s3 cp s3://bucket/folder/ . --recursive --exclude="*" --include="2017-12-20*"
确保您获得exclude
和include
过滤器的顺序,因为这可能会改变整个含义。
答案 4 :(得分:2)
尝试以上所有方法。没有太多的喜悦。最后,将@rajan的回复改编成单行:
for file in whatever*.txt; do { aws s3 cp $file s3://somewhere/in/my/bucket/; } done
答案 5 :(得分:-1)
我解决了问题,可能有点愚蠢,但它确实有效。
使用python,我在一个.sh文件上写了多行AWS下载命令,然后在终端上执行它。