Я пытаюсь выяснить, какой будет команда s3cmd для загрузки файлов из корзины по дате, например, у меня есть корзина с именем «тест», и в этой корзине есть разные файлы с разных дат. Я пытаюсь получить файлы, которые были загружены вчера. какая будет команда?
ищем команду загрузки s3cmd на определенную дату
comment
Как организовано ведро/папка? Он плоский или по дате?
- person helloV   schedule 14.09.2016
comment
Файл, размер, тип, последнее изменение (год-месяц-дата, час-минута-секунда), класс Sotrage
- person John Doe   schedule 14.09.2016
comment
если структура вашей корзины организована по датам, можно перебирать структуру папок и извлекать файлы. (Это имеет место в журналах AWS S3 CloudTrail)
- person Ali   schedule 14.09.2016
Ответы (2)
Нет единой команды, которая позволит вам это сделать. Вы должны написать сценарий что-то вроде этого. Или используйте SDK, который позволяет это сделать. Ниже приведен пример сценария, который будет получать файлы S3 за последние 30 дней.
#!/bin/bash
# Usage: ./getOld "bucketname" "30 days"
s3cmd ls s3://$1 | while read -r line; do
createDate=`echo $line|awk {'print $1" "$2'}`
createDate=`date -d"$createDate" +%s`
olderThan=`date -d"-$2" +%s`
if [[ $createDate -lt $olderThan ]]
then
fileName=`echo $line|awk {'print $4'}`
echo $fileName
if [[ $fileName != "" ]]
then
s3cmd get "$fileName"
fi
fi
done;
person
error2007s
schedule
13.09.2016
Мне нравится s3cmd, но для работы с однострочной командой я предпочитаю JSon-вывод aws cli и jq JSon процессор
Команда будет выглядеть
aws s3api list-objects --bucket "yourbucket" |\
jq '.Contents[] | select(.LastModified | startswith("yourdate")).Key' --raw-output |\
xargs -I {} aws s3 cp s3://yourbucket/{} .
в основном, что делает скрипт
- перечислить все объекты из данного ведра
- (интересная часть) jq проанализирует массив
Contents
и выберет элемент, в котором значениеLastModified
начинается с вашего шаблона (вам нужно будет изменить), получитьKey
объекта s3 и добавить--raw-output
, чтобы удалить кавычку из значения - передать результат команде копирования aws, чтобы загрузить файл с s3
если вы хотите немного автоматизировать, вы можете получить вчерашний день из командной строки
для мак ос
$ export YESTERDAY=`date -v-1w +%F`
$ aws s3api list-objects --bucket "ariba-install" |\
jq '.Contents[] | select(.LastModified | startswith('\"$YESTERDAY\"')).Key' --raw-output |\
xargs -I {} aws s3 cp s3://ariba-install/{} .
для linux os (или другой вариант bash, с которым я не знаком)
$ export YESTERDAY=`date -d "1 day ago" '+%Y-%m-%d' `
$ aws s3api list-objects --bucket "ariba-install" |\
jq '.Contents[] | select(.LastModified | startswith('\"$YESTERDAY\"')).Key' --raw-output |\
xargs -I {} aws s3 cp s3://ariba-install/{} .
Теперь вы понимаете, хотите ли вы изменить переменную YESTERDAY
, чтобы она имела другую дату.
person
Frederic Henri
schedule
14.09.2016