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} .