본문 바로가기

프로젝트 설정/AWS|GCP

[AWS] cli를 이용한 s3 파일 삭제하기 (feat. ubuntu)

반응형

해당 글은 ubuntu 20.04 에서 진행되었습니다.

windows 10에서 하다가 실패함 ㅜ

사전 준비물

# cmd 접근권한 확인
aws s3 ls s3://버킷명

# 번외 json으로 "다" 보기
aws s3api list-objects-v2 --bucket 버킷명

삭제하기

삭제 리스트 뽑기

aws s3api list-objects --bucket [my-bucket] --prefix [folder]/ --query 'Contents[?Where][.{Select Key}]'

# test_bucket의 lasmodifed 가 20230213보다 작은 경우 모든 정보
aws s3api list-objects --bucket test_bucket --query 'Contents[?LastModified<`2023-02-13T00:00:00.000Z`]'

# return
[  {
        "Key": "test/test.jpeg",
        "LastModified": "2023-01-05T12:18:31+00:00",
        "ETag": "\"09f19e3e734682b7e15e4bcaa36bf1b6-5\"",
        "Size": 39465,
        "StorageClass": "STANDARD",
        "Owner": {
            "ID": "d388176d1b2aa337a1a351f33e54d0291f81c16fc50c507756c912e23d05afb9"
        }
    },{
        "Key": "test1/test.jpeg",
        "LastModified": "2023-01-05T12:18:31+00:00",
        "ETag": "\"09f1923e734682b7e15e4bcaa36bf1b6-5\"",
        "Size": 39465,
        "StorageClass": "STANDARD",
        "Owner": {
            "ID": "d388176d1b2aa337a1a351f33e54d0291f81c16fc50c507756c912e23d05afb9"
        }
    }
]

# --prefix 폴더
# Json 항목 변경 Contents[].[json 항목]
aws s3api list-objects --bucket test_bucket --prefix test/ --query 'Contents[?LastModified<`2023-02-13T00:00:00.000Z`].{Key: Key, LastModified: LastModified}'

# return
[  {
        "Key": "test/test.jpeg",
        "LastModified": "2023-01-05T12:18:31+00:00"
    }
]

# 해당 결과 형태로 변경 --output
aws s3api list-objects --bucket test_bucket --prefix test/ --query 'Contents[?LastModified<`2023-02-13T00:00:00.000Z`].{Key: Key, LastModified: LastModified}' --output text

# return
test/test.jpeg    2023-01-05T12:18:31+00:00

# 해당 결과 파일로 만들기
aws s3api list-objects --bucket test_bucket --prefix test/ --query 'Contents[?LastModified<`2023-02-13T00:00:00.000Z`].{Key: Key, LastModified: LastModified}' --output text > delete.txt

# 원하는값만 파일로 내보내기 (첫번째 항목만)
aws s3api list-objects --bucket test_bucket --prefix test/ --query 'Contents[?LastModified<`2023-02-13T00:00:00.000Z`].{Key: Key, LastModified: LastModified}' --output text | awk '{print $1}' > delete.txt

삭제하기

# 뭔가 잘 되는지 모르겠다.;
aws s3api delete-objects --bucket <bucket-name> --delete "$(cat delete_list.txt | awk '{print "{\"Object\": [{\"Key\": \"" $1 "\"}]}"}')"

# error bash: /usr/local/bin/aws: Argument list too long
# 삭제하려는 객체의 수가 많아 명령의 최대 길이를 초과하여 생기는 문제일 수 있습니다. 이러한 경우에는 배치 파일에서 각 객체를 순차적으로 삭제하는 방식을 사용해야함.


# delete_list.txt
# aws s3api list-objects --bucket test_bucket --prefix test/ --query 'Contents[?LastModified<`2023-02-13T00:00:00.000Z`].{Key: Key}' --output text > delete_list.txt
# for문 돌리기 .sh
# delete.sh
while read line; do
  aws s3 rm s3://<bucket-name>/$line
done < delete_list.txt

bash delete.sh

 

 

실패

더보기

확인 및 삭제

유감스럽게도 aws cli에서는 date를 이용하여 조회하는 등의 옵션이 없다. ㅠㅠ (왜....ㅠㅠ)

그래서 특정 aws의 서비스를 사용하지않거나 뭐 다른 db에 파일 리스트를 관리하지않는 이상. 스크립트를 짜서 해야한다 ^^..

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-services-s3-commands.html#using-s3-commands-delete-objects

https://docs.aws.amazon.com/cli/latest/reference/s3/rm.html

확인

옵션 --dryrun 을 해주면 삭제할 리스트를 보여준다. 실행 X

 

삭제

 

 

참고

https://medium.com/@sinkashot/aws-cli-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-s3-%ED%8C%8C%EC%9D%BC-%EC%82%AD%EC%A0%9C%ED%95%98%EA%B8%B0-e62029429168

 

AWS CLI 사용하여 S3 파일 삭제하기

To delete a S3 file using the AWS CLI

medium.com

https://mozi.tistory.com/414

 

[AWS] S3 특정 기간이 지난 오래된 파일 삭제하는 방법

AWS S3 에서 오래된 파일을 삭제하는 방법 aws s3 ls 로 파일을 조회하면 아래처럼 파일이 S3 에 마지막으로 수정된 시간을 나타냅니다. 1234[root@test ~]# aws s3 ls s3://bucket/test/2020-07-28 21:06:39 0 a2020-07-28 21

mozi.tistory.com

https://shout.setfive.com/2011/12/05/deleting-files-older-than-specified-time-with-s3cmd-and-bash/

 

Deleting files older than specified time with s3cmd and bash - {5} Setfive - Talking to the World

Update: Amazon has now made it so you can set expiration times on objects in S3, see more here: https://forums.aws.amazon.com/ann.jspa?annID=1303 Recently I was working on a project where we upload backups to Amazon S3.  I wanted to keep the files around

shout.setfive.com

https://may9noy.tistory.com/131

 

S3 주기적 파일 삭제

- 수명주기 기반으로 주기적 파일을 삭제하는 프로세스를 구현해보자. - AWS -> S3 -> 버킷 -> 관리로 이동하여 수명주기 정책을 생성하자. - 접두사 라는것은 규칙 범위를 지정할 수 있다. 하나 이상

may9noy.tistory.com

https://github.com/aws/aws-cli/issues/1104

 

aws s3 ls - find files by modified date? · Issue #1104 · aws/aws-cli

Hi, We'd like to be able to search a bucket with many thousands (likely growing to hundreds of thousands) of objects and folders/prefixes to find objects that were recently added or updated. Ex...

github.com

https://mozi.tistory.com/414

 

반응형