Как использовать подстановочные знаки для `cp` группы файлов с помощью интерфейса командной строки AWS

110

У меня проблемы с использованием * в интерфейсе командной строки AWS для выбора подмножества файлов из определенного сегмента.

Добавление *к такому пути, похоже, не работает

aws s3 cp s3://data/2016-08* .

метров
источник

Ответы:

184

Для загрузки нескольких файлов из AWS ведра в текущем каталоге, вы можете использовать recursive, excludeи includeфлаги , как это:

aws s3 cp s3://data/ . --recursive --exclude "*" --include "2016-08*"

Для получения дополнительной информации о том, как использовать эти фильтры: http://docs.aws.amazon.com/cli/latest/reference/s3/#use-of-exclude-and-include-filters

панкрокполли
источник
24
Хочу отметить, что --exclude "*"это не опечатка. Если вы не добавите его, включение будет соответствовать чему угодно . Согласно документации: обратите внимание, что по умолчанию включены все файлы. Это означает, что предоставление только фильтра --include не изменит передаваемые файлы. --include повторно включает только те файлы, которые были исключены из фильтра --exclude. Если вы хотите загружать файлы только с определенным расширением, вам нужно сначала исключить все файлы, а затем повторно включить файлы с определенным расширением.
pyb
7
Также помните о порядке исключения и включения.
keiki
3
Вы также можете использовать syncдля аналогичного эффекта, который по умолчанию является рекурсивным:aws s3 sync s3://data/ . --exclude "*" --include "2016-08*"
enharmonic
55

Порядок параметров имеет значение

Исключить и включить следует использовать в определенном порядке: сначала нужно исключить, а затем включить. Наоборот, успеха не будет.

aws s3 cp s3://data/ . --recursive  --include "2016-08*" --exclude "*" 

Это не удастся, потому что в этом случае важен порядок параметров. Включение исключено *

aws s3 cp s3://data/ . --recursive --exclude "*" --include "2016-08*"`

Этот будет работать, потому что мы исключили все, но позже мы включили конкретный каталог.

одинокая звезда
источник
1

Хорошо, я должен сказать, что это неверный пример и его следует исправить следующим образом:

aws s3 cp . s3://data/ --recursive --exclude "*" --include "2006-08*" --exclude "*/*"

В .должен быть сразу же после cp. Последний --exclude- убедиться, что ничего не получено из каких-либо подкаталогов, которые были взяты --recursive(узнал это по ошибке ...)

Это сработает для всех, кто борется с этим к тому времени, когда они сюда приедут.

Патрик Палмер
источник