我试图复制最新的文件基于最后修改从AWS S3Folder_Test1
文件夹到一个Folder_Test2
文件夹在同一个桶中,并在复制命令中使用排除和包括。
Folder_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
文件从Folder_Test1到Folder_Test2:
aws s3 cp s3://$bucket/Folder_Test1/ s3://$bucket/Folder_Test2/ --recursive --exclude "*abc_def*"
步骤2它将获取最新的abc
文件从Folder_Test2:
aws s3 ls s3://$bucket/Folder_Test2/ --recursive | sort | tail -n 1 | awk '{print $4}'
如何将最新文件从文件夹_Test2复制到文件夹_Test3?或者如何从文件夹_Test2中删除除最新文件之外的所有其他文件?
你扫描了多少文件?
如果它是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/
中最近修改的文件的密钥。
更多信息:
免责声明:我写S3P是为了处理非常大的桶。
此命令将列出给定前缀的“最新”对象:
aws s3api list-objects --bucket MY-BUCKET --prefix foo/ --query 'sort_by(Contents, &LastModified)[-1].Key' --output text
您可以将其与“复制”命令结合使用:
key=$(aws s3api list-objects --bucket SOURCE-BUCKET --prefix foo/ --query 'sort_by(Contents, &LastModified)[-1].Key' --output text)
aws s3 cp s3://SOURCE-BUCKET/$key s3://DEST-BUCKET/
--query
参数非常强大。请参阅:JMESPath教程
但是,列表对象命令不能与-包括
/-排除
组合。
坦率地说,编写一个小型Python脚本来实现您的目标可能会更容易。
我能够让这个工作,但它需要一些shell相关的代码和jq
。在Linux的环境中,我能够做这样的事情:
aws s3 cp s3://$bucket/`aws s3api list-objects-v2 --bucket $bucket --prefix Folder_Test1/ | jq -r '.[] | sort_by(.LastModified)[-1].Key'` $bucket/Folder_Test2/
这有什么用?第一部分查找本例中以“Folder_Test1/”开头的最新文件:
aws s3api list-objects-v2 --bucket $bucketsource --prefix Folder_Test1/ | jq -r '.[] | sort_by(.LastModified)[-1].Key'
然后我们将这个输出传递到jq
,让它按最后修改字段排序,并获得该项的密钥。请注意,这是使用s3api
,以便我们可以读取原始JSON。
一旦我们有了它,我们就使用这个输出作为cp
命令的输入。
这是在Ubuntu系统上用AWS CLI(2.0.30)的V2测试的。jq命令已经安装。
我有一个用例,在这个用例中,我以编程方式启动一个EC2实例,从S3复制一个可执行文件,运行它并关闭实例(在用户数据中完成)。我只需要从S3获取最后添加的文件。 有没有办法使用AWS CLI工具从S3存储桶中获取上次修改的文件/对象?
问题内容: 有什么标准的方法可以告诉您页面的最后修改时间?目前,我正在这样做: 但是,看起来有些站点没有字段。 http://www.cbc.ca具有以下标头字段: 我可以解析页面以尝试获取其日期,但这似乎是一个很大的痛苦。标准是什么? (如果可能的话,我想坚持使用URLConnection,因为那是我用来下载网页的方法) 问题答案: 没有标准。动态生成的网页通常没有“ Last- Modifie
有什么想法可以解决这个问题吗?谢谢。
问题内容: 在具有新I / O API的Java7中,是否有一种简便的方法可以按上次修改日期列出目录的内容?基本上,我只需要获取未修改时间最长的文件(按最后修改的升序排序,采用第一个文件名)。 问题答案: 并没有真正的“简便方法”,但是有可能: 这将对文件排序最快,最后修改的文件最后排序。s不会遍历子目录。
我有一个Azure Blob存储安装到我的Database ricks hdfs。有没有办法在数据库中获取Blob的最后修改日期? 这就是我阅读blob内容的方式:
我需要获取Azure Databricks下DBFS装载点(ADLS Gen1)中所有文件夹和文件的最后修改日期。文件夹结构如下: 使用以下Python代码获取最后修改日期: 从上面的代码中,我得到了所有包含文件的文件夹的正确修改日期。 但对于空文件夹,它会给出当前日期。不是上次修改日期。 然而,当我硬编码空文件夹的路径时,它会给出正确的修改日期: 打印(datetime.fromtimestam