이 방법 역시, ‘해결’이라기 보단 돌아가기다.
그래도, 그나마 이게 지금까지 알아낸 방법 중 유일하기도 하고, 편하게도 쓸 수 있는 해결책이다.
이전에 쓴 글에서도 언급했지만, 이 글에서 도움을 받았다.
convmv (Converts Filenames from one encoding to another AND move(rename)) 를 사용해야 하는데, 이건 macOS 에 설치되어 있지 않다. Homebrew 를 통해 설치한다.
brew install convmv
사용법은 아래와 같다.
convmv -r -f utf8 -t utf8 --nfc --notest <dir>
여기서 <dir> 은, 바꾸고자 하는 파일이나 디렉토리의 ‘상위’ 디렉토리이다.
-r
은 ‘하위 디렉토리까지 모두 변환(Recursive)’ 를 의미하고, 따라서 필요에 따라 적절히 사용하면 될 듯 한데, 그게 그렇질 못하다.
convmv 는 Directory 에만 작동을 한다. (macOS 용 convmv 만 그런진 모르겠으나..)
Linux 에서 확인을 해보니, 리눅스용은 파일명을 주면 그 파일만 변환을 해주는데, macOS 에 설치된 convmv 는 이런 반응을 보인다.
convmv -f utf8 -t utf8 --nfc --notest 새롭게/가나다라.txt Ready! I converted 0 files in 0 seconds.
즉, convmv <filename>
은 해도 작동하질 않는다. 다시 말해, 디렉토리 전체에 명령을 내려야만 작동하고, 파일에 명령을 내릴 수는 없다.
따라서, 어떤 파일이나 디렉토리 이름을 변경하기 위해선, 그 파일의 하나 위 디렉토리를 넣어줘야 한다. (버그인지??)
예를 들어, ~/aa/강아지
(폴더) ~/aa/서울.txt
(파일) 등을 변환하고 싶다면, 다음과 같이 해줘야 한다.
convmv -r -f utf8 -t utf8 --nfc --notest ~/aa
파일 하나, 디렉토리 하나만 변경하고 싶어도 그렇게 할 수가 없는 듯 하다.
이 문제가 좀 짜증 유발자가 될 수도 있다. 바꾸려고 하는 대상에, 하위 디렉토리가 없거나 적은 상태라면 괜찮겠으나, 하위에도 파일들이 많이 있다면, 전수 조사를 하기 때문에 시간이 많이 걸리는 점을 감수해야만 한다.
시험을 해보면 이렇다.

Finder 에서 ‘강아지’, ‘고양이’ 라는 폴더를 만들었다. Finder 로는 파일을 생성할 수가 없어서(적어도 나는 그런 메뉴를 못찾았다.), ‘텍스트 편집기’로 파일을 저장했고, 이름을 ‘부산 – by 텍스트편집기’라고 넣어줬다.
‘토커로’ 는 T.C 에서 만든 디렉토리다.
다음, VS Code 를 사용해서, 이번에는 ‘서울.txt’ 라고 저장했다.
마지막으로, Finder 를 통해 서울.txt 를 복사하여 이름을 ‘서울-by vs code.txt’ 로 바꿨다.
그 디렉토리/파일들을 Wine 을 통해 실행한 T.C 로 확인한 결과가 위의 그림이다.
Finder 의 손을 조금이라도(?) 탄 것들은 모두 풀어쓰기가 돼 버렸다.
같은 macOS 응용프로그램이지만, 애플이 제공하는 ‘텍스트 편집기’는 NFD 로 저장이 되었고, VS Code 는 NFC 로 저장이 됐다.
지난 번에도 언급했지만, 터미널에서 만든 파일은 NFC 이다.
프로그램마다, 다들 방식이 다르다. 어떤 프로그램이 NFC 를 사용하는지, 시험을 해봐야만 알 수 있고, 지정을 할 수도 없다. (아아아 짜증난다.)
아무튼, 이걸 convmv 로 바꿔주면..

풀어쓰기는 모아쓰기로!
이렇게 터미널에서 사용할 수도 있으나, Finder 의 ‘서비스’ 메뉴를 사용해서 Finder 와 연동하는 편이 훨씬 편하리라 생각된다.
메시지까지 출력하게끔 해주면 더할 나위 없을 듯 한데..
Automator 를 열고, ‘서비스’를 선택한 후, 다음과 같이 선택한다.
- 서비스가 받는 선택 항목 : 폴더
- 선택 항목 위치 : Finder
- 보관함/유틸리티에서 : 셸 스크립트 실행 선택
- 셸 스크립트에서 : 통과입력 ‘변수’
- 셸 명령 : convmv -r -f utf8 -t utf8 –nfc –notest “$1”
이제 적당한 이름을 주고 저장한다.
Finder 에서 폴더를 선택한 후, ‘서비스’ 메뉴로 들어가서 이 명령을 실행해주면 변환이 완료된다.
“즉, convmv 은 해도 작동하질 않는다. 다시 말해, 디렉토리 전체에 명령을 내려야만 작동하고, 파일에 명령을 내릴 수는 없다.” : 이 부분은 잘못되었습니다. 작성자의 경우에는 정확하게 잘 작동된 것입니다. 위의 아무일도 일어나지 않은 것은 문제가 없기 때문에 변환이 일어나지 않은 것입니다. 만약 유니코드 문제가 있는 파일에 대해 동일한 명령어를 입력할 시, 변경전 변경후의 이름이 나오면서 “Ready! I converted 1 files in 0 seconds.” 이런 식으로 나옵니다.
그렇군요.
제가 아는게 없어서..