aws s3 cp/sync에서 --exclude와 --include 순서가 결과를 바꾸는 이유
조회 1 · 댓글 0
S3에 올리거나 내려받을 때 특정 확장자만 빼거나 일부 파일만 골라 넣고 싶을 때가 있습니다. aws s3 명령은 기본적으로 모든 파일과 객체를 포함하고, 여기에 --exclude와 --include로 규칙을 겁니다. 핵심은 이 옵션들이 적어준 순서대로 왼쪽에서 오른쪽으로 적용되고, 뒤에 오는 옵션이 앞 규칙을 덮어쓴다는 점입니다. 그래서 같은 패턴이라도 순서를 바꾸면 결과가 달라집니다.
로컬에 MyFile1.txt, MyFile2.rtf, MyFile88.txt가 있다고 할 때 공식 문서 예시는 이렇습니다.
# .txt 전부 제외 -> MyFile2.rtf만 복사
aws s3 cp . s3://my-bucket/path --exclude "*.txt"
# .txt 제외했다가 MyFile*.txt는 다시 포함 -> 3개 모두 복사
aws s3 cp . s3://my-bucket/path --exclude "*.txt" --include "MyFile*.txt"
# 위에서 다시 MyFile?.txt 제외 -> MyFile2.rtf, MyFile88.txt 복사
aws s3 cp . s3://my-bucket/path --exclude "*.txt" --include "MyFile*.txt" --exclude "MyFile?.txt"그래서 딱 특정 파일만 올리고 싶으면 --exclude "*"를 맨 앞에 두고 원하는 --include를 뒤에 붙이는 패턴을 씁니다. 이 필터는 cp, mv, sync, rm에서 똑같이 동작합니다.
⚠️ sync --delete와 같이 쓸 때는 주의하세요. 이때 --exclude/--include는 삭제 대상까지 걸러내며, 패턴은 대상(target) 디렉터리나 버킷 기준으로 해석됩니다. 필터를 잘못 주면 지우려던 파일이 남거나 남기려던 파일이 지워질 수 있으니 실제 실행 전에 대상 경로 기준으로 패턴을 점검해 보시길 바랍니다.
🔗 https://docs.aws.amazon.com/cli/v1/userguide/cli-services-s3-commands.html
로그인 후 답글을 남길 수 있습니다.