[AWS] EC2에서 S3로 업로드 시 한글 파일명에 대한 에러

지난 포스팅에서 EC2에 있는 이미지들을 webp로 컨버팅하고 S3에 업로드하는 방법을 작성했다.
진행하면서 발생된 에러와 해결했던 내용을 포스팅해보겠다.
처음에 동기화했던 명령어는 아래와 같다.

1
aws s3 sync {PATH} s3://{BUCKET NAME}

순조롭게 진행되었고, 대략 26G를 업로드하는데 50분정도 소요되었다. 업로드가 다 되고 모든 이미지 파일이 성공적으로 업로드 되었는지 확인하기 위해 EC2 서버의 파일 개수와 S3에 업로드된 파일 개수와 비교해보았는데, 약 1,000개정도의 파일이 누락되었다. 왜지? 안타깝게도 단순히 명령어만 실행했기 때문에 실패에 대한 로그는 알 수 없었다.
그래서 이미 업로드된 파일은 패스하고 업로드 되지 않은 파일에 대해서만 다시 업로드를 하기로 했다.


아래와 같이 쉘 스크립트 파일을 생성해서 실행했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash

DIR="{PATH}"
S3_DIR="{BUCKET NAME}"
LOG_FILE="{LOG FILE NAME}.txt"

aws s3 sync --exclude "*" --include "*" --no-progress "$DIR" "$S3_DIR" 2>&1 | tee /dev/tty | awk 'BEGIN {FS="[:\r]"} /failed:/{print $3}' >> "$LOG_FILE"

if [ ! -s "$LOG_FILE" ]; then
    echo "All files synced successfully"
else
    echo "Some files failed to sync, see $LOG_FILE for details"
fi

하지만 아래와 같은 에러가 발생했고, 해당 경로에 있는 파일을 확인해보니 한글 파일명이었다.
검색해보니 locale 세팅을 해주어야 한다고 한다.

1
2
3
warning: Skipping file '\xeb\xb0\x94\xec\xbd\x94\xeb\x93\x9c.jpg'. There was an error trying to decode the the file '\xeb\xb0\x94\xec\xbd\x94\xeb\x93\x9c.jpg' in directory "{PATH}".
Please check your locale settings.  The filename was decoded as: ANSI_X3.4-1968
On posix platforms, check the LC_CTYPE environment variable.

locale 명령어를 실행. LC_CTYPE를 찾을 수 없는 것이 문제인 것 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
> locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

환경 변수를 설정하는 /etc/environment 파일에 아래와 같이 작성했다.

1
2
3
LANG=en_US.utf-8
LC_ALL=en_US.utf-8
LC_CTYPE=en_US.UTF-8

작성 후 재접속한다.


locale 명령어를 다시 실행해보면 아래와 같이 정상적으로 세팅이 될 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
> locale
LANG=en_US.utf-8
LC_CTYPE="en_US.utf-8"
LC_NUMERIC="en_US.utf-8"
LC_TIME="en_US.utf-8"
LC_COLLATE="en_US.utf-8"
LC_MONETARY="en_US.utf-8"
LC_MESSAGES="en_US.utf-8"
LC_PAPER="en_US.utf-8"
LC_NAME="en_US.utf-8"
LC_ADDRESS="en_US.utf-8"
LC_TELEPHONE="en_US.utf-8"
LC_MEASUREMENT="en_US.utf-8"
LC_IDENTIFICATION="en_US.utf-8"
LC_ALL=en_US.utf-8

동기화도 정상적으로 완료되었다.

Categories:

Updated:

Leave a comment