从 s3 存储桶复制多个文件

Copy multiple files from s3 bucket

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

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

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

我解决了问题,可能有点笨,但它有效。

使用 python,我在一个 .sh 文件上写了多行 AWS 下载命令,然后在终端上执行它。

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

#!/bin/bash  
set -e  
while read line  
do  
  aws s3 cp s3://bucket-name/$line dest-path/  
done <filename.txt

您可能想使用 "sync" 而不是 "cp"。以下将 download/sync 仅本地文件夹中扩展名为“.txt”的文件:

aws s3 sync --exclude="*" --include="*.txt" s3://mybucket/mysubbucket .

也可以使用 --recursive 选项,如 documentation for cp 命令中所述。它将递归地复制指定前缀下的所有对象。

示例:

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

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

根据 doc,您也可以将 includeexclude 过滤器与 s3 cp 一起使用。所以你可以这样做:

aws s3 cp s3://bucket/folder/ . --recursive --exclude="*" --include="2017-12-20*"

确保 excludeinclude 过滤器的顺序正确,因为这可能会改变整个含义。

以上都试过了。没有多少快乐。最后,将@rajan 的回复改编成一行:

for file in whatever*.txt; do { aws s3 cp $file s3://somewhere/in/my/bucket/; } done

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

我使用了这个命令

cat <filename>.txt | parallel aws s3 cp {} <output_dir>

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

s3://bucket-name/file1.wav
s3://bucket-name/file2.wav
s3://bucket-name/file3.wav

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

@Rajan 的回答非常好,但是当在 *.txt 文件和源 s3 存储桶中找不到匹配项时它会失败,但是下面的代码也解析了本期:

#!/bin/bash
while IFS= read -r line; do
aws s3 cp s3://your-s3-source-bucket/folder/$line s3://your-s3-destination/folder/
done <try.txt

您唯一需要做的就是 运行 您 aws notebook 中的 bash 文件。

!chmod +x YOUR-BASH-NAME.sh
!./YOUR-BASH-NAME.sh