Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS S3 CLI中的选择性文件下载_Amazon Web Services_Amazon S3 - Fatal编程技术网

Amazon web services AWS S3 CLI中的选择性文件下载

Amazon web services AWS S3 CLI中的选择性文件下载,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我在S3存储桶中有文件,我试图根据日期下载文件,比如8月8日,9月9日,我如何下载选择性日期文件?。 我使用了下面的代码,但它仍然下载整个存储桶列表 aws s3 cp s3://bucketname/ folder/file --profile pname --exclude \"*\" --recursive --include \"" + "2015-08-09" + "*\" 我不知道如何实现这一点。此命令将复制从2015-08-15开始的所有文件: aws s3 cp s3://BU

我在S3存储桶中有文件,我试图根据日期下载文件,比如8月8日,9月9日,我如何下载选择性日期文件?。 我使用了下面的代码,但它仍然下载整个存储桶列表

aws s3 cp s3://bucketname/ folder/file --profile pname --exclude \"*\" --recursive --include \"" + "2015-08-09" + "*\"

我不知道如何实现这一点。

此命令将复制从
2015-08-15
开始的所有文件:

aws s3 cp s3://BUCKET/ folder --exclude "*" --include "2015-08-15*" --recursive
如果您的目标是同步一组文件而不复制两次,请使用
sync
命令:

aws s3 sync s3://BUCKET/ folder
aws s3 sync s3://BUCKET/ folder --exclude "*" --include "2015-08-15*"
这将复制自上次同步以来添加或修改的所有文件

实际上,这相当于上面的
cp
命令:

aws s3 sync s3://BUCKET/ folder
aws s3 sync s3://BUCKET/ folder --exclude "*" --include "2015-08-15*"
参考资料:

如果你的桶大到10到20吉格, 这在我个人的使用案例中是真实的,你可以实现同样的效果 在多个终端窗口中使用
sync
实现目标

所有终端会话都可以使用相同的令牌,以防您需要为prod环境生成令牌

 $ aws s3 sync s3://bucket-name/sub-name/another-name folder-name-in-pwd/
 --exclude "*" --include "name_date1*"  --profile UR_AC_SomeName
和另一个终端窗口(相同pwd)

另外两个用于
“name\u date3*”和“name\u date4*”

此外,您还可以在同一同步中执行多个排除 命令如下所示:


此Bash脚本将使用aws cli按修改日期将所有文件从一个bucket复制到另一个bucket。

aws s3 ls <BCKT_NAME> --recursive | sort | grep "2020-08-*" | cut -b 32- > a.txt
aws s3 ls--recursive | sort | grep“2020-08-*”| cut-b32->a.txt 内部Bash文件

while IFS= read -r line; do
    aws s3 cp s3://<SRC_BCKT>/${line} s3://<DEST_BCKT>/${line} --sse AES256
done < a.txt
而IFS=read-r行;做
aws s3 cp s3://${line}s3://${line}--sse AES256
完成
Bash命令将特定日期或月份的所有文件复制到当前文件夹 命令正在执行以下操作

  • 列出一个bucket下的所有文件
  • 过滤掉2021-02年的所有文件,即2021年2月的所有文件
  • 只过滤出它们的名称
  • 在特定文件上运行命令
    aws s3 cp

  • 你能澄清你的问题吗?您的文件名中是否编码了日期,或者您希望根据对象的创建日期进行下载?@JohnRotenstein文件名为“2015-08-15T001Z.log.gz”、“2015-08-14T001Z.log.gz”等。每天将有24个文件,范围从“T001z.log.gz”到“T023z.log.gz”。我正在寻找一种方法来选择某一天的文件,例如:2015-08-15,该文件应将该日期的所有24个文件从S3复制到本地计算机。当文件夹包含几年的日志时,下载最后一天的日志需要几个小时,因为
    aws s3 sync
    对所有这些过滤器进行迭代,并与
    exclude
    /
    include
    过滤器进行比较。有什么方法可以更快地完成吗?在第3步开始之前,我会遇到
    致命错误:在第4步调用HeadObject操作时发生错误(404):Key
    ,我是否需要手动传递文件名而不是{}?
    aws s3 ls s3://bucketname/ | grep '2021-02' | awk '{print $4}' | aws s3 cp s3://bucketname/{} folder