이름없이 S3에 파일을 업로드하는 방법
Athena를 사용하여 S3 버킷에서 데이터를 읽고 있는데 다음 파일의 데이터가 정확합니다.
# aws s3 ls --human s3://some_bucket/email_backup/email1/
2020-08-17 07:00:12 0 Bytes
2020-08-17 07:01:29 5.0 GiB email_logs_old1.csv.gz
아래와 같이 경로를 _updated로 변경하면 오류가 발생합니다.
# aws s3 ls --human s3://some_bucket/email_backup_updated/email1/
2020-08-22 12:01:36 5.0 GiB email_logs_old1.csv.gz
2020-08-22 11:41:18 5.0 GiB
이는 동일한 위치에 이름이없는 추가 파일 때문입니다. 이름없는 파일을 어떻게 업로드했는지 모르겠습니다. 반복하는 방법을 알고 싶습니다. (피할 수 있도록)
답변
모든 S3 파일에는 이름이 있습니다 (실제로 전체 경로는 객체 이름을 정의하는 메타 데이터 인 객체 키입니다).
당신의 경로에 빈라는 이름의 파일이 있으면 s3://some_bucket/email_backup_updated/email1/당신 가능성이라는 이름의 파일을 만들었습니다 s3://some_bucket/email_backup_updated/email1/.
앞서 언급했듯이 S3 객체는 키를 사용하기 때문에 파일 계층이 존재하지 않습니다. 대신 접두사로 필터링합니다.
후행 슬래시없이 다음을 수행하여이를 확인할 수 있어야합니다 aws s3 ls --human s3://some_bucket/email_backup_updated/email1.
대상 경로 끝에 추가 공백 을 추가 하면 파일이 S3에 복사되지만 이름은 비어 있습니다. 예를 들어
aws s3 cp t.txt s3://some_bucket_123/email_backup_updated/email1/
(email1 / 뒤에 공백이 없습니다.)
\ xa0은 실제로 Latin1의 비 분리 공백이며 chr (160)이기도합니다. 깨지지 않는 공간 자체가 파일의 이름입니다!
동일한 논리를 사용하여 끝 부분에 끊기지 않는 공백을 추가하여 "공백"파일을 제거 할 수 있습니다.
aws s3 rm s3://some_bucket_123/email_backup_updated/email1/
콘솔에 로그인하여 사용자 인터페이스에서 제거 할 수도 있습니다.