我有一个名为uploads
的s3存储桶,其中包含数百万个图像,我想从这些图像中删除特定名称。
E.g
Anyimagesname-100x70.jpg
Anyimagesname-218x150.jpg
Anyimagesname-324x160.jpg
....
然后我有一个专门处理删除此类文件的脚本:
# !/bin/bash
for imageWithSize in $(find . -regextype posix-extended -regex ".*-[[:digit:]]{1,9}x[[:digit:]]{1,9}(@2x)?.(jpg|jpeg|png|eps|gif)" -type f); do
echo rm $imageWithSize >> result.txt
rm $imageWithSize
done
但是我不知道如何使用AWS S3 Cli。
也许是这样的:
aws s3 rm s3://uploads/ --dryrun --recursive --exclude "*" --include ".*-[[:digit:]]{1,9}x[[:digit:]]{1,9}(@2x)?.(jpg|jpeg|png|eps|gif)"
这行吗?
答案 0 :(得分:0)
否,AWS CLI无法接受复杂的正则表达式。
您可以编写如下脚本:
import boto3
import re
BUCKET = 'my-bucket'
s3_client = boto3.client('s3', region_name='ap-southeast-2')
response = s3_client.list_objects_v2(Bucket=BUCKET)
# Get a list of object Keys
keys = [object['Key'] for object in response['Contents']]
# Find keys like: Anyimagesname-100x70.jpg
pattern = '.*-[\d]{1,9}x[\d]{1,9}(@2x)?.(jpg|jpeg|png|eps|gif)'
keys_to_delete = [key for key in keys if re.search(pattern, key)]
print(keys_to_delete)
# Delete them!
keys_dict = [{'Key':key} for key in keys_to_delete]
if keys_dict:
s3_client.delete_objects(Bucket=BUCKET, Delete={'Objects': keys_dict})
请注意,list_objects_v2()
一次返回1000个对象,因此,如果您有更多文件,则需要使用ContinuationToken
添加分页代码。