Удалить несколько файлов S3 Bucket с условием даты последнего изменения - PullRequest
0 голосов
/ 14 марта 2019

Как удалить несколько файлов S3 с Дата последнего изменения условие даты?

У меня такая структура папок на s3.

  • dentca-lab-dev-sample
    • 2019-03-13
      • file1 Последнее изменение: 13 марта 2019 г. 14:34:06 GMT-0700
      • file2 Последнее изменение: 13 марта 2019 15:18:01 GMT-0700
      • file3 Последнее изменение: 13 марта2019 14:34:30 GMT-0700
      • file4 Последнее изменение: 13 марта 2019 14:32:40 GMT-0700

и хотел удалить файл (это всего лишь пример) меньше Mar 13, 2019 2:34:30 PM

, и поэтому я создал этот скрипт bash, но он не работает.

aws s3 ls --recursive s3://dentca-lab-dev-sample/2019-03-13/ | awk '$1 <= "2019-03-13 14:34:30" {print $4}'

** ls только для тестирования.изменит его на rm

У меня также есть этот скрипт для тестирования

aws s3 ls --recursive s3://dentca-lab-dev-sample/2019-03-13/

вывод:

2019-03-13 14:34:06   11656584 2019-03-13/mandibular.stl
2019-03-13 15:18:01   11969184 2019-03-13/maxillary.stl
2019-03-13 14:34:30    9169657 2019-03-13/obj.obj
2019-03-13 14:32:40   15690284 2019-03-13/upperAIO_50005.stl

, но когда я делаюawk для создания условия не работает.Возможно, потому что $1 только ловит этот arugment 2019-03-13, и я сравниваю его с 2019-03-13 14:34:30

, также пытался сделать это.awk '$1 $2 <= "2019-03-13 14:34:30" {print $4}' чтобы поймать второй аргумент, но все равно ничего не получил.Это мой первый способ сделать удар между прочим.

Спасибо!Я имею это как ссылку, кстати. aws cli s3 bucket удалить объект с условием даты

1 Ответ

1 голос
/ 14 марта 2019

Вы можете использовать это, чтобы получить список объектов с LastModified до указанной даты:

aws s3api list-objects --bucket my-bucket --query "Contents[?LastModified<='2019-03-13'].[Key]" --output text

Обратите внимание, что он использует s3api вместо s3, который имеет доступ к болееинформация.

Затем вы можете взять результаты и закачать их в aws s3 rm, чтобы удалить объекты.

Честно говоря, если вы хотите получить более детальную информацию, я бы порекомендовал использовать Python.вместо Баш.Это было бы что-то вроде:

import boto3

s3 = boto3.client('s3', region_name='ap-southeast-2')
response = s3.list_objects_v2(Bucket='my-bucket')

keys_to_delete = [{'Key': object['Key']} for object in response['Contents'] if object['LastModified'] < datetime(2019, 3, 13)]
s3.delete_objects(Bucket='my-bucket', Delete={'Objects': keys_to_delete})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...