Я пытаюсь скопировать файлы из одной корзины s3 в другую с некоторыми изменениями в пути назначения.
Исходный сценарий выглядит следующим образом:
import boto3
import os
old_bucket_name = 'XT01-sample-data'
old_prefix = 'Test/'
new_bucket_name = 'XT02-sample-data2'
new_prefix = old_bucket_name + '/' + old_prefix
s3 = boto3.resource('s3')
ENCRYPTION = os.environ.get('SERVER_SIDE_ENCRYPTION', 'AES256')
STORAGE_CLASS = os.environ.get('STORAGE_CLASS', 'INTELLIGENT_TIERING')
old_bucket = s3.Bucket(old_bucket_name)
new_bucket = s3.Bucket(new_bucket_name)
extra_args = {
'ServerSideEncryption': ENCRYPTION,
'StorageClass': STORAGE_CLASS
}
for obj in old_bucket.objects.filter(Prefix=old_prefix):
old_source = { 'Bucket': old_bucket_name,
'Key': obj.key}
# replace the prefix
new_key = obj.key.replace(old_prefix, new_prefix, 1)
new_obj = new_bucket.Object(new_key)
print("Object old ", obj)
print("new_key ", new_key)
print("new_obj ", new_obj)
new_obj.copy(old_source,ExtraArgs=extra_args)
print("Starting Deletion Loop")
bucket = s3.Bucket(old_bucket_name)
bucket.objects.filter(Prefix=old_prefix).delete()
Приведенный выше сценарий копирует файлы из корзины XT01-sample-data, папка Test / в новую корзину XT02-sample-data2 с новым путем XT01-sample-data / Test1 /
Теперь требуется изменить сценарий для добавления отметки времени в месте назначения путь и файлы из одной папки попадают под разовую отметку времени.
Например: у нас есть файлы ниже в исходной корзине в разных папках
XT01-sample-data/Test1/Test1.1/File1.csv
XT01-sample-data/Test1/Test1.1/File2.csv
XT01-sample-data/Test1/Test1.1/File3.csv
XT01-sample-data/Test1/Test1.2/File1.2.1.csv
XT01-sample-data/Test1/Test1.2/File1.2.2.csv
XT01-sample-data/Test1/Test1.3/File1.3.csv
XT01-sample-data/Test1/Test2/Test2.1/File2.1.csv
Ожидаемый вывод должен быть всем файлы из одной подпапки должны быть помещены под одной отметкой времени. Не все файлы должны быть помещены в одну временную метку. Должен быть уровень разделения, основанный на временной метке на миллисекундном уровне (unix отметка времени)
Для файлов в папке Test1 / Test1.1
XT01-sample-data/Test1/2020/01/23/0000/File1.csv
XT01-sample-data/Test1/2020/01/23/0000/File2.csv
XT01-sample-data/Test1/2020/01/23/0000/File3.csv
Для файлов в папке Test1 / Test1.2
XT01-sample-data/Test1/2020/01/23/0003/File1.2.1.csv
XT01-sample-data/Test1/2020/01/23/0003/File1.2.2.csv
Для файлов в папке Test1 / Test1.3
XT01-sample-data/Test1/2020/01/23/0004/File1.3.csv
Для файлов в папке Test1 / Test2 / Test2.1
XT01-sample-data/Test1/2020/01/23/0005/File2.1.csv