Как включать и копировать файлы, находящиеся в текущем каталоге, на s3 (и не рекурсивно)
У меня есть некоторые файлы, которые я хочу скопировать на s3.
Вместо того, чтобы делать один вызов на файл, я хочу включить их в один звонок (чтобы быть максимально эффективным).
Однако мне кажется, что он работает, если я добавлю флаг --recursive, который заставляет его смотреть во всех дочерних каталогах (все файлы, которые я хочу, находятся только в текущем каталоге)
так что теперь это команда, которая работает
aws s3 cp --dryrun . mybucket --recursive --exclude * --include *.jpg
но в идеале я хотел бы удалить -recursive, чтобы остановить его перемещение,
например что-то вроде этого (что не работает)
aws s3 cp --dryrun . mybucket --exclude * --include *.jpg
(Я упростил пример, в моем script у меня есть несколько разных шаблонов include)
Ответы
Ответ 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