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

관련 정보