从AWS S3 CLI获取上次修改的对象

人气:931 发布:2022-10-16 标签: amazon-web-services amazon-s3 aws-cli

问题描述

我正在尝试将基于上次修改时间的最新文件从AWS S3Folder_Test1文件夹复制到同一存储桶中的Folder_Test2文件夹,并在复制命令中使用Exclude和Include。

Folders_Test1:

Name                               Last Modified
T1_abc_june21.csv                  June 21,2020 9:27:03 AM GMT-0700
T1_abc_june21.csv                  June 21,2020 7:40:15 PM GMT-0700
T1_abc_june21.csv                  June 21,2020 9:20:32 PM GMT-0700
T1_abc_june25.csv                  June 25,2020 10:23:30 PM GMT-0700
T2_abc_june29.csv                  June 29,2020 6:15:12 AM GMT-0700
T2_abc_june29.csv                  June 29,2020 5:12:15 PM GMT-0700 (Fetch this object)
T1_abc_def_june21.csv              June 21,2020 6:13:15 PM GMT-0700
T2_abc_def_june25.csv              June 25,2020 5:33:10 AM GMT-0700
T3_abc_def_june25.csv              June 25,2020 9:31:15 PM GMT-0700 (Fetch this object)

我必须筛选仅具有abc的最新文件的文件名,并排除复制文件:

我尝试: 步骤1将abc文件从FolderTest1复制到FolderTest2:

aws s3 cp  s3://$bucket/Folder_Test1/ s3://$bucket/Folder_Test2/ --recursive --exclude "*abc_def*"

步骤2它将从FolderTest2:

获取最新abc文件
aws s3 ls  s3://$bucket/Folder_Test2/ --recursive | sort | tail -n 1 | awk '{print $4}'
如何将最新文件从FolderTest2复制到FolderTest3?或者如何从FolderTest2中删除除最新文件以外的所有其他文件?

推荐答案

您正在扫描多少文件?

如果是100,000或更多,您可能希望使用比AWS-CLI更快的版本。S3P使用并行列表算法将S3存储桶列表的速度提高10倍以上。

您只需安装NodeJs。然后使用:

运行s3p
npx s3p map 
  --bucket  my-bucket 
  --prefix  Folder_Test1/ 
  --reduce  "js:(a, b) => a.LastModified > b.lastModified ? a : b" 
  --finally "js:({Key}) => Key"

这将输出Folder_Test1/中最近修改的文件的密钥。

更多信息:

套餐:https://www.npmjs.com/package/s3p Github:https://github.com/generalui/s3p

免责声明:我为处理非常大的存储桶编写了S3P。

591