从 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,您也可以将 include
和 exclude
过滤器与 s3 cp
一起使用。所以你可以这样做:
aws s3 cp s3://bucket/folder/ . --recursive --exclude="*" --include="2017-12-20*"
确保 exclude
和 include
过滤器的顺序正确,因为这可能会改变整个含义。
以上都试过了。没有多少快乐。最后,将@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
我无法将多个文件从 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,您也可以将 include
和 exclude
过滤器与 s3 cp
一起使用。所以你可以这样做:
aws s3 cp s3://bucket/folder/ . --recursive --exclude="*" --include="2017-12-20*"
确保 exclude
和 include
过滤器的顺序正确,因为这可能会改变整个含义。
以上都试过了。没有多少快乐。最后,将@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