ищем команду загрузки s3cmd на определенную дату

Я пытаюсь выяснить, какой будет команда s3cmd для загрузки файлов из корзины по дате, например, у меня есть корзина с именем «тест», и в этой корзине есть разные файлы с разных дат. Я пытаюсь получить файлы, которые были загружены вчера. какая будет команда?


person John Doe    schedule 13.09.2016    source источник
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/{} .

в основном, что делает скрипт

  1. перечислить все объекты из данного ведра
  2. (интересная часть) jq проанализирует массив Contents и выберет элемент, в котором значение LastModified начинается с вашего шаблона (вам нужно будет изменить), получить Key объекта s3 и добавить --raw-output, чтобы удалить кавычку из значения
  3. передать результат команде копирования 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