Загрузка файлов на S3 с использованием AWS CLI - PullRequest
0 голосов
/ 31 марта 2020

Я новичок в AWS CLI и имею требование загружать файлы на S3 с сервера Linux. Ниже приведен мой пример использования:

Входной каталог имеет структуру, в которой папка создается на сервере на основе текущей даты, например: /users/data/20200329 и /users/data/20200330.

Каждая папка содержит несколько подпапок :

/users/data/20200329/govt/inbound/truey.gz   
/users/data/20200329/corp/inbound/672695.gz
/users/data/20200330/govt/inbound/dddd.gz   
/users/data/20200330/corp/inbound/4444.gz

Я хочу загрузить на S3, например:

s3://bucketname/20200329/truey.gz
s3://bucketname/20200329/672695.gz
s3://bucketname/20200330/dddd.gz
s3://bucketname/20200330/4444.gz

и аналогично.

Итак, в двух словах, я не хочу подпапки в S3, а просто одну папку с датами, которая будет содержать все файлы из подпапок, упомянутых во входном каталоге. Как мне добиться этого с помощью AWS CLI?

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Это будет относиться ко всем файлам за один день:

aws s3 cp /users/data/20200329/govt/inbound/ \
          s3://bucketname/20200329 \
          --recursive 
aws s3 cp /users/data/20200329/corp/inbound/ \
          s3://bucketname/20200329 \
          --recursive 

Если вы хотите выполнять итерации по дням месяцев и так далее:

#!/bin/bash

#requires Bash 4.0+ to pad leading 0 in day number
for day in {01..31};
do
   aws s3 cp /users/data/20200329/govt/inbound/ \
            s3://bucketname/202003$day \
            --recursive 
   aws s3 cp /users/data/20200329/corp/inbound/ \
            s3://bucketname/202003$day \
            --recursive 
done
0 голосов
/ 31 марта 2020

Лог c для размещения файлов по заданным c путям превышает то, что AWS CLI может определить .

Вам нужно будет выполнить отдельные команды:

aws s3 cp /users/data/20200329/govt/inbound/truey.gz s3://bucketname/20200329/truey.gz 
aws s3 cp /users/data/20200329/corp/inbound/672695.gz s3://bucketname/20200329/672695.gz
aws s3 cp /users/data/20200330/govt/inbound/dddd.gz s3://bucketname/20200330/dddd.gz  
aws s3 cp /users/data/20200330/corp/inbound/4444.gz s3://bucketname/20200330/4444.gz

Если вы хотите применить некоторую форму логики c для файлов, которые должны быть загружены, я бы порекомендовал написать скрипт (например, в Python), который будет:

  • Вывести список входных файлов
  • Использовать некоторые манипуляции со строками для извлечения соответствующих битов
  • Вызывает upload_file() API-вызов для загрузки файла в нужное место
...