我有一个具有以下架构的S3桶-
Bucket
|__2019-08-23/
| |__SubFolder1
| |__Files
|
|__2019-08-22/
|__SubFolder2
我想要删除所有文件夹,子文件夹和文件,其中是旧的X天。
怎样才能做到呢?我不确定S3 LifeCycle是否可以用于此?
当我做的时候-
aws s3 ls s3://bucket/
我明白了-
PRE 2019-08-23/
PRE 2019-08-22/
为什么我在文件夹名前面看到了PRE?
根据有价值的评论,我试过这个-
$ Number=1;current_date=$(date +%Y-%m-%d);
past_date=$(date -d "$current_date - $Number days" +%Y-%m-%d);
aws s3api list-objects --bucket bucketname --query 'Contents[?LastModified<=$past_date ].{Key:Key,LastModified: LastModified}' --output text | xargs -I {} aws s3 rm bucketname/{}
我试图删除所有的文件,其中有一天。但我知道这个错误-
Bad jmespath expression: Unknown token $:
Contents[?LastModified<=$past_date ].{Key:Key,LastModified: LastModified}
如何以最后修改的方式传递变量?
发布于 2019-08-23 00:53:50
如果您有更复杂的逻辑或命令行,可以使用生命周期,即lambda函数。
下面是一个使用命令行的示例:
aws s3api list-objects --bucket your-bucket --query 'Contents[?LastModified>=`2019-01-01` ].{Key:Key,LastModified: LastModified}' --prefix "2019-01-01" --output text | xargs -I {} aws s3 rm s3://your-bucket/{}
发布于 2019-08-23 00:50:20
@Elzo的回答已经涵盖了生命周期策略以及如何删除对象,因此,在这里,我对您问题的第二部分有一个答案:
PRE表示前缀,如aws s3 cli手册中所述。
如果您运行aws s3 ls help
,您将看到以下部分:
下面的ls命令在指定的桶和前缀下列出对象和常见前缀。在本例中,用户拥有带有test.txt和somePrefix/test.txt对象的存储桶。最后一个- WriteTime和长度是任意的.请注意,由于ls命令与本地文件系统没有交互,解决歧义不需要s3:// URI方案,因此可以省略: aws s3 ls ss3://mybucket输出: PRE / 2013-07-25 17:06:27 88 test.txt
这只是为了区分具有前缀(由正斜杠拆分)的键和没有前缀的键。
因此,如果您的密钥是prefix/key01
,您将始终在它前面看到一个PRE
。但是,如果您的键是key01
,则不会显示PRE
。
请记住,S3不与目录一起工作,即使您可以在从UI中查看时知道其他情况。S3的文件结构只是一个平面的单层文件容器。
从医生那里:
在亚马逊S3中,桶和对象是主要资源,其中对象存储在存储桶中。亚马逊S3有一个平面结构,没有像你在文件系统中看到的那样的层次结构。但是,为了组织简单起见,Amazon控制台支持将文件夹概念作为对象分组的一种方式。亚马逊S3通过使用对象的共享名称前缀(即以公共字符串开头的名称的对象)来实现这一点。对象名称也称为键名。 例如,您可以在控制台中创建一个名为“照片”的文件夹,并在其中存储一个名为myphoto.jpg的对象。然后,将该对象存储在键名/myphoto.jpg中,而照片/是前缀。
发布于 2019-08-23 00:39:58
S3生命周期可以用于存储桶。对于文件夹和子文件夹管理,您可以编写一个简单的AWS来删除xx天前的文件夹和子文件夹。利用S3 AWS为JavaScript、Java或Python等开发Lambda。
https://stackoverflow.com/questions/57621572
复制相似问题