iconv와 find로 모든 파일 인코딩 변경
dev | 2016-06-27
어떤 파일들이 있는지 몰랐기 때문에 확장자를 지정하지 않고 모든 파일을 변환해야 했고 다른 파일을 생성하는 것이 아니라 변환 결과를 같은 파일명으로 덮어 써야 했다. 같은 파일명으로 iconv와 redirection을 쓰면 변환하기 전에 0 바이트짜리 파일로 변환할 파일을 덮어 써 버렸다. 이리저리 검색해서 따라해봤는데 잘 안되어서 결국 중간 과정 파일을 생성 하는 것으로 전략을 변경했다.
xargs도 써봤는데 넘어온 아규먼트 이름을 변환하는 방법을 몰라서 포기하고 다른 방법을 검색해 보다가 파일명의 인코딩을 변환하는 방법을 발견했고 이 글에 나온 명령어를 바꿔서 해봤더니 됐다. 결과를 보니 자명해보인다. 맨 끝에 있는 '-- {}'는 뭔지 잘 모르겠다.
find ./ -type f -exec bash -c 'iconv -f euc-kr -t utf-8 {} > {}.utf8 && mv {}.utf8 {}' -- {} \;
모든 파일을 변환했기 때문에 개중에는 이미지 파일 같이 iconv가 변환할 수 없다고 오류를 내는 파일도 섞여 있었다. 변환은 잘 됐는데 오류날 때 생성된 {}.utf8이 엄청 많이 생겼다. 다행히 원본 파일을 0 바이트 파일로 덮어 쓰지는 않았다. 그냥 git에 추가 안 된 파일을 다 지웠다.
git clean -f
Comments