我想从 S3 Spaces 下载最新的 150 个文件

我想从 S3 Spaces 下载最新的 150 个文件

我想从 S3 Spaces 下载最新的 150 个文件。我用了这个命令

s3cmd get s3://obs/site1/uploads/large/ /home/ankit -r | tail -n150

但它没有达到我想要的效果;相反,它开始下载所有文件

例如:如果我命令: 输入 s3cmd ls s3://obs/site1/uploads/large/

输出

2020-04-30 20:04         0   s3://obs/site1/uploads/large/
2020-04-30 20:04   1401551   s3://obs/site1/uploads/large/501587671885rwk.jpg
2020-04-30 20:04    268417   s3://obs/site1/uploads/large/501587676002xe2.jpg
2020-04-30 20:04    268417   s3://obs/site1/uploads/large/501587677157ssj.jpg
2020-04-30 20:04    268417   s3://obs/site1/uploads/large/501587747245hea.jpg
2020-05-01 05:23    399636   s3://obs/site1/uploads/large/87429599_1412258992269430_5992557431891165184_o.jpg

我只想下载最后一个文件(它是最新的):

2020-05-01 05:23    399636   s3://obs/site1/uploads/large/87429599_1412258992269430_5992557431891165184_o.jpg

我可以列出最新文件,但无法下载最新文件:我列出的是:

s3cmd ls s3://obs/site1/uploads/large/ | tail -n1

输出:2020-05-01 05:23 399636

s3://obs/site1/uploads/large/87429599_1412258992269430_5992557431891165184_o.jpg

那么,请告诉我只下载这个最新文件的命令?

答案1

所有的部件都已就位,您需要做的就是将它们串在一起。

此命令提供最后一个文件,即您想要的文件,但我们需要切掉结果的第一部分

s3cmd ls s3://obs/site1/uploads/large/ | tail -n1
2020-05-01 05:23    399636   s3://obs/site1/uploads/large/87429599_1412258992269430_5992557431891165184_o.jpg

s3cmd ls s3://obs/site1/uploads/large/ | sed -rn 's!^.*(s3://)!\1!p' | tail -n1
s3://obs/site1/uploads/large/87429599_1412258992269430_5992557431891165184_o.jpg

该命令下载一个文件

s3cmd get s3://obs/site1/uploads/large/some_file_or_other /home/ankit

所以你把它们放在一起

file=$(s3cmd ls s3://obs/site1/uploads/large/ | sed -rn 's!^.*(s3://)!\1!p' | tail -n1)
s3cmd get "$file" /home/ankit

在问题的另一部分中,您讨论了下载多个文件,因此这里是此方法的扩展,用于按s3cmd ls顺序获取最后 150 个文件:

s3cmd ls s3://obs/site1/uploads/large/ |
    tail -n150 |
    while read -r date time size s3path
    do
        s3cmd get "$s3path" /home/ankit
    done

答案2

DATE=$(date +%Y-%m-%d)

FILE="$(aws s3api list-objects --bucket bucket_name --query 'Contents[?LastModified>=  `'"$DATE"'`][].{Key: Key}' --output=text| grep file_name)"

aws s3 cp s3://bucket_name/${FILE} .

相关内容