如何获取AWS S3存储桶中20个最旧文件?含报错与分隔符疑问
解决AWS S3获取最旧20个文件的问题及分隔符用法
错误原因与修复
你碰到的sort_by()报错,是因为Contents字段返回了null——要么你的S3桶是空的,要么list-objects调用没拿到对象数据(比如桶名写错、权限不够)。
要正确获取最旧的20个文件,得先确保排序逻辑能处理Contents为空的情况,同时注意**--max-items是限制API返回的原始对象数,不是排序后的结果数**,所以正确的命令应该先拉取所有对象、排序后再取前20:
aws s3api list-objects --bucket BUCKETNAME --query "if(Contents, sort_by(Contents, &LastModified)[0:20].Key, [])" --output text
这个命令会先判断Contents是否存在,存在就按LastModified升序排序(最旧的在前),取前20个的Key;如果桶空就返回空结果,不会报错。
用分隔符"/"实现指定路径下的需求
当然可以用"/"分隔符实现——S3里的"/"是用来模拟文件夹的前缀,如果你只想获取某个"文件夹"下的最旧20个文件,只需给命令加上--prefix参数指定前缀路径即可,比如要获取data/路径下的文件:
aws s3api list-objects --bucket BUCKETNAME --prefix "data/" --query "if(Contents, sort_by(Contents, &LastModified)[0:20].Key, [])" --output text
这个命令会只筛选前缀为data/的对象,再按修改时间排序取最旧的20个。
内容的提问来源于stack exchange,提问作者Acrux
相关产品推荐
相关产品推荐

