#amazon-web-services #amazon-s3
#amazon-веб-сервисы #amazon-s3
Вопрос:
Я выполняю синхронизацию S3 из источника в dest, и я хочу синхронизировать определенную папку только каждый день на основе даты. В настоящее время исходный сегмент S3 имеет формат S3://bucket/year/month / day /min. Я запустил приведенную ниже команду S3 sync для первой загрузки, которая заняла 4 часа:
aws s3 sync s3://source-bucket/ s3://destination-bucket
Однако я хочу сделать что-то подобное, чтобы сэкономить время:
aws s3 sync s3://source-bucket/year/month/day s3://destination-bucket/year/month/day
Вопрос в том —> Есть ли способ передать параметры для каждой части года, месяца, дня, чтобы это было автоматизировано? например, если я запущу скрипт сегодня, он должен сработать:
aws s3 sync s3://source-bucket/2019/03/11 s3://destination-bucket/2019/03/11
Моя игра в скриптах оболочки не настолько сильна, поэтому пытаюсь понять, есть ли хороший способ сделать это.
Ответ №1:
Разобрался с этим. Это то, что я написал:
export current_date=$(date %Y%m%d)
export previous_date=
export Year=$(date %Y)
export Month=$(date %m)
export day=$(date --date='1 day ago' ' %d')
#Taking yesterday's date
export SOURCE_S3='s3://Source/'$Year/$Month/$day/
export DESTINATION_S3='s3://DESTINATION/'$Year/$Month/$day/
echo 'aws s3 sync' $SOURCE_S3 $DESTINATION_S3
aws s3 sync $SOURCE_S3 $DESTINATION_S3
Ответ №2:
Один из вариантов — извлечь путь к «последнему файлу» из исходного сегмента и использовать его для копирования в пункт назначения.
Эта команда предоставит ключ файла, который был изменен последним:
aws s3api list-objects-v2 --bucket my-bucket --query 'sort_by(Contents, amp;LastModified)[-1].Key' --output text
Затем вы могли бы изменить возвращаемое значение, удалив имя файла и используя оставшийся путь в aws s3 sync
команде.