-
Mac에서 한글 인코딩 다 깨졌을 때 모든 파일 변경하기 (find, read, iconv)개발 환경/Mac 2020. 3. 16. 19:52반응형
윈도우에서 만든 txt 파일이 맥에서 열면 위와 같이 고대어가 된다. 찾아보니 원인은 윈도우에서 작성된 파일이 'cp949'로 인코딩되었기 때문이란다. 폴더 하부에 있는 모든 txt파일까지 전부 다시 'uft-8'로 바꿔보자.
1. find 명령어
find 명령어는 검색어에 따라 파일을 찾아주는 명령어이다. 나의 타겟은 txt파일이다.
find . -name "*.txt"
위에 .은 현재 디렉토리를 말하고 현재 디렉토리부터 하위 디렉토리까지 모두 검색한다. -name은 검색어고 "*.txt"에서 *은 모든 경우을 말한다. 위 명령어를 실행하면 현재 디렉토리부터 하위 디렉토리까지 모든 txt파일을 찾아준다.
2. iconv 명령어
iconv 명령어는 문자열의 인코딩을 바꿔주는 명령어이다. 나는 현재 'cp949'에서 'utf-8'로 바꿔야한다.
iconv -c -f cp949 "tmp.txt" > "tmp2.txt"
위에 -c는 에러를 막아준다고 간단히 생각하면 되고, -f cp949는 현재 파일의 인코딩(from)을 뜻한다. -t utf-8의 옵션(to)을 넣어주면 utf-8로 설정해주지만 안넣어도 자동으로 설정된다. 앞에 tmp.txt는 타겟 파일을 말하고 뒤에 tmp2.txt는 목적 파일을 말한다. 쉽게 말해서 tmp.txt를 cp949에서 utf-8로 바꿔주고 tmp2.txt라고 저장한다. 여기서 같은 이름을 쓰면 덮어써줄거 같지만 안된다.
3. 한꺼번에 다 바꾸기
find . -name "*.txt" | \ while read filename do tempName=${filename}~temp~.txt mv "$filename" "$tempName" iconv -c -f cp949 "$tempName" > "$filename" rm "$tempName" echo $filename done
A. find . -name "*.txt"
는 위에서 설명했고, |(파이프)이 있기때문에 앞 명령어의 결과를 뒤 명령어의 입력으로 사용한다.
B. while read filename do done
뒤 명령어는 while문인데 큰 구조는 read 명령어를 통해 한줄씩 읽어온후 filename에 저장한다.
while read filename do ... done
C. tempName=${filename}~temp~.txt
filename을 기반으로 임시로 다른 이름을 지정한다. 새로 인코딩한 파일 이름을 위한 것이다.
D. mv "$filename" "$tempName"
원래 파일 이름을 tempName로 지정된 문자열로 바꾼다.
E. iconv -c -f cp949 "$tempName" > "$filename"
위에서 설명했다.
F. rm "$tempName"
기존 cp949 파일을 삭제
G. echo $filename
filename을 출력
이러한 프로세스가 읽어올 파일 이름이 없을때까지 계속 진행된다.
4. 결론
제대로 바뀐 것을 확인할 수 있다. 스크립트 작성후 데이터셋 전부에 대해 돌리는데 너무 오래 걸려서 꺼버렸다...
sentence = np.loadtxt("tmp.txt", encoding='cp949')
라는 좋은 넘파이 함수가 있기 때문이다..
출처:
https://brownbears.tistory.com/171
https://kiboard.tistory.com/75
https://jupiny.com/2017/07/10/shell-script-basic-5/
https://recipes4dev.tistory.com/156
반응형'개발 환경 > Mac' 카테고리의 다른 글
파이썬으로 맥에서 깨진 한글 파일명 복구 (0) 2020.05.15 Mac에 ms office 2019 설치 (영어, 한글 가능) (104) 2020.02.03 맥북과 구형 모니터나 TV 연결시 YCbCr (분홍색 화면)으로 나오는 경우 해결방법 [2020.1.10 해결, Catalina 10.15.2] (4) 2020.01.10