로컬에서 여러 파일을 S3에 업로드하고자 와일드카드(*)를 사용하여 cp 명령어를 시도하니 Unknown options 에러가 발생하였다.
확인해보니 aws cli를 사용하여 S3로 여러 파일을 업로드하려면 recursive 및 include, exclude 필터를 사용해주어야 한다. (UNIX 스타일의 와일드카드 사용은 지원되지 않는다.)
recursive를 사용하면 지정된 디렉토리 또는 접두사 아래의 모든 파일 및 객체에 대해 명령이 수행된다.
이 때, exclude 옵션이 include 옵션보다 우선해야 정상적으로 동작하는데
exclude 파라미터로 먼저 모든 파일을 선택하고 include 파라미터를 사용하여 copy를 원하는 객체의 특정 문자를 포함하는 파일만 추출하여 업로드하는 형태가 된다.
$ aws s3 cp [source(로컬 디렉토리 경로)] [target(s3 url)] --recursive --exclude "*" --include "image-*"
$ aws s3 cp /Users/squirrel/Desktop/Images s3://test-s3-squirrel/cp-test/ --recursive --exclude "*" --include "image-*"
upload: ./image-1.jpg to s3://test-s3-squirrel/cp-test/image-1.jpg
upload: ./image-4.jpg to s3://test-s3-squirrel/cp-test/image-4.jpg
upload: ./image-2.jpg to s3://test-s3-squirrel/cp-test/image-2.jpg
upload: ./image-3.png to s3://test-s3-squirrel/cp-test/image-3.png
아래와 같이 test-s3-squirrel 버킷의 cp-test 폴더 안에 "image-*"에 해당하는 파일만 업로드 된 것을 확인할 수 있다.
$ aws s3 cp <source> <target> [--options]
$ aws s3 cp filename.txt s3://bucket-name
[1] https://docs.aws.amazon.com/cli/latest/reference/s3/
[2] https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-services-s3-commands.html