AWS CLI의 S3명령어에서 와일드카드 패턴 비슷하게 쓰기

2022.01.06

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

안녕하세요 DA사업본부 빅데이터팀의 송영진입니다.

오늘은 AWS CLI를 사용해서 S3에 대한 커맨드를 쓸 때 와일드카드 패턴을 유사하게 사용하는 방법에 대한 블로그입니다!

S3에 대해서 잘 모르시는 분들은 재욱님이 알기 쉽게 정리해주신 블로그를 참고하시면 되겠습니다.

AWS CLI란?

AWS Command Line Interface(AWS CLI)는 명령줄 셸의 명령을 사용하여 AWS 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다. 최소한의 구성으로 AWS CLI를 사용하면 터미널 프로그램에 있는 명령 프롬프트에서 브라우저 기반 AWS Management Console에서 제공하는 것과 동일한 기능을 구현하는 명령을 실행할 수 있습니다.

AWS의 다양한 서비스를 사용하기 위해서 유저는 매니지먼트 콘솔을 사용 할 수도 있지만 터미널 환경에서 커맨드를 입력하는 것으로 AWS 서비스를 다룰 수도 있습니다.

이번 블로그에서 다룰 S3에 대한 명령어의 유스케이스에는 예를들어 10만 단위의 파일을 한 번에 이동하거나 삭제하고 싶을 때가 있습니다. 이번에 제가 바로 그 경우였는데 필요한 파일만 남겨두고 필요없는 파일이 수십만개가 같은 버킷에 있는데 콘솔에서 옮길 수도 있지만 한 페이지에 표시되는 파일은 한계가 있기 때문에 패턴으로 지우기가 필요하게 되었습니다.

그럴 때 AWS CLI 명령어로 단 한 줄만에 작업을 실행시킬 수 있겠습니다.

와일드카드 패턴?

와일드카드 문자(wildcard character)는 컴퓨터에서 특정 명령어로 명령을 내릴 때, 여러 파일을 한꺼번에 지정할 목적으로 사용하는 기호를 가리킨다. 이 문자는 어느 곳에서 사용하느냐에 따라 약간의 차이를 보인다. 주로 특정한 패턴이 있는 문자열 혹은 파일을 찾거나, 긴 이름을 생략할 때 쓰인다.

정규 표현식에서 사용하는 패턴으로 주로 *이나 ? 문자를 사용하여 여러 파일이나 문자열을 다룰 때 사용하는 패턴으로 이번에 저희가 사용할 명령어에서는 주로 파일이 되겠습니다.

예를들어 bash shell에서 현재 폴더에 abc1, abc2, abc3, aaa, bbb, ccc라는 파일이 있을 때

abc로 시작하는 파일을 삭제하고 싶다하면

rm abc*

remove 명령어인 rm을 사용하여 삭제를 할 수 있겠습니다.

AWS CLI S3명령어에서 와일드카드가 안되는데요?

그렇습니다. 우리도 쉘에서 사용하는 명령어를 그대로 AWS CLI에서 사용하고 싶습니다. 위의 명령어를 AWS CLI에서 사용하려면 다음과 같습니다

aws cli s3 rm s3://something-great-bucket/abc* --profile yjsong_role

delete: s3://something-great-bucket/abc*

저 명령어를 그대로 실행하면 위와 같은 결과를 반환합니다. 어떤 뜻이냐면 something-great-bucket라는 버킷의 abc*이라는 파일을 지웠습니다가 되겠습니다.

저희가 원하는 결과는 abc로 시작하는 파일을 모두 지워주세요였는데 S3에서는 파일과 폴더의 이름에 *이 들어갈 수 있기 때문에 특정한 파일이나 폴더를 삭제하는 명령어가 되어버립니다.

그렇지만 당연히 준비가 되어있죠 AWS CLI S3에서 지원하는 명령어에는 다양한 옵션들이 존재합니다.

그 중에서 저희가 사용할 옵션은 --include--exclude 옵션이 되겠습니다.

  • include 옵션은 지정된 패턴과 일치하는 파일이나 오브젝트를 명령에서 제외하지 않습니다.
  • exclude 옵션은 지정된 패턴과 일치하는 모든 파일 또는 오브젝트를 명령에서 제외합니다.

자 이제 아까 사용했던 커맨드를 옵션을 사용하여 바꿔보겠습니다

aws cli s3 rm s3://something-great-bucket/ --profile yjsong_role --exclude "*" --include "abc*"

위와 같이 버킷 안에서 abc로 시작하는 폴더를 삭제 할 수 있었습니다.

저는 빈 폴더를 삭제하였기 때문에 삭제가 가능했지만 폴더 내부에 파일이 있다면 --recursive 옵션을 사용하는 것으로 폴더 내부의 파일도 삭제가 가능합니다!

이 옵션들은 mv의 이동, cp의 복사를 할 때도 사용한 옵션이라서 알아두시면 AWS CLI로 S3를 조작할 때 더욱 편리하게 사용하실 수 있을거라고 생각합니다.

패턴에 관해서는 정규표현식을 이해하시고 사용하시면 더욱 다양하면서도 자기에게 필요한 패턴을 만들어서 커맨드 횟수를 많이 줄일 수 있게 됩니다.