Подтвердить что ты не робот

Как включать и копировать файлы, находящиеся в текущем каталоге, на s3 (и не рекурсивно)

У меня есть некоторые файлы, которые я хочу скопировать на s3. Вместо того, чтобы делать один вызов на файл, я хочу включить их в один звонок (чтобы быть максимально эффективным).

Однако мне кажется, что он работает, если я добавлю флаг --recursive, который заставляет его смотреть во всех дочерних каталогах (все файлы, которые я хочу, находятся только в текущем каталоге)

так что теперь это команда, которая работает

aws s3 cp --dryrun . mybucket --recursive --exclude * --include *.jpg

но в идеале я хотел бы удалить -recursive, чтобы остановить его перемещение, например что-то вроде этого (что не работает)

aws s3 cp --dryrun . mybucket --exclude * --include *.jpg

(Я упростил пример, в моем script у меня есть несколько разных шаблонов include)

4b9b3361

Ответ 1

Поддержка подстановок AWS CLI S3 немного примитивна, но вы можете использовать несколько опций --exclude для достижения этой цели. Примечание: порядок includes и excludes важен.

aws s3 cp --dryrun . s3://mybucket --recursive --exclude "*" --include "*.jpg" --exclude "*/*"

Ответ 2

Попробуйте выполнить команду:

aws s3 cp --dryrun . s3://mybucket --recursive --exclude "*/"

Надеюсь, что это поможет.

Ответ 3

Я бы предложил пойти на утилиту s4cmd, которая предоставляет нам unix, как операции с файловой системой, а также позволяет включать в себя wild cards https://github.com/bloomreach/s4cmd

Ответ 4

Я попробовал предложенные ответы и не мог получить aws, чтобы пропустить вложенные папки. Видел некоторые странные выходы о вычислении размера и 0 объектов размера, несмотря на использование флага исключения.

В конце концов я отказался от флага --recursive и использовал bash для выполнения одной загрузки s3 для каждого сопоставленного файла. Удалите --dryrun после того, как вы готовы к работе!

for i in *.{jpg,jpeg}; do aws --dryrun s3 cp ${i} s3://your-bucket/your-folder/${i}; done