%20%D0%B8%D0%B7%20%D0%BA%D0%BE%D1%80%D0%B7%D0%B8%D0%BD%D1%8B%20s3%20%D0%BD%D0%B0%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%83%D1%8E%20%D0%B4%D0%B0%D1%82%D1%83.png)
Мне нужно получить все файлы за вчерашний день из корзины s3. Я знаю, как это сделать в CLI, когда знаю имя файла:
#aws s3 cp s3:{Path}/{FileName} {diretoryToCopyTo}
но как мне сделать это для файлов определенной даты? Просто получить список имен файлов для определенной даты тоже будет достаточно, из любого метода, не обязательно CLI.
Подвох:В корзине несколько миллионов файлов, поэтому я также ищу экономически эффективный способ.
решение1
Если имя файла содержит дату, вы можете использоватьвключить и исключить фильтры:
aws s3 cp s3:{path}/ {directoryToCopyTo} --exclude "*" --include "*2019-09-09*"
Если дата есть только в метаданных файла, то в настоящее время нет метода фильтрации по дате на стороне сервера. Есть обсуждение на github, гдеwillstruebingимеет метод, использующий s3api
:
вот способ сделать это с помощью
s3api
и--query
функции. Это проверено на OSX:aws s3api list-objects --bucket "bucket-name" --query 'Contents[?LastModified>=2016-05-20][].{Key: Key}'
затем вы можете отфильтровать с помощью jq или grep, чтобы выполнить обработку с другими функциями s3api. Редактировать: не уверен, почему они не отображаются, но вам нужно использовать обратные кавычки, чтобы окружить дату, которую вы запрашиваете
...но это не уменьшает количество вызовов API, поскольку фильтрация выполняется на стороне клиента.