본문 바로가기

Linux

[Linux]디렉토리 전체의 인코딩을 euc-kr에서 utf-8로 바꾸기


퍼온곳 : http://yesyo.com/forums/archive/index.php/t-832.html

디렉토리 전체의 인코딩을 euc-kr에서 utf-8로 바꾸기

redhat-9에서 fedora-core 1으로 옮겨가면서 저에게 가장 문제가 되었던 사항이 인코딩이었습니다. 처음엔 그냥 복사해서 옮기다가, iconv가 있는걸 알고나서는 그것을 사용했는데요... 파일을 따로따로 인코딩을 옮겨야하다 보니 역시 불편해서 스크립트를 하나 만들었습니다. 좀더 자세한 사항은 아래 사이트를 참조하세요

http://quanta.cau.ac.kr/~caulug//wiki/wiki.php?iconv - 링크가 깨졌네요

#!/bin/sh
# euckr2utf8 : iconv를 이용해 디렉토리 전체의 파일의 euckr 인코딩을 utf8로바
# + 꾸는 쉘스크립트이다. #
# 저 자 : S.H.Lee
# 사용법 : euckr2utf8 SOURCE_DIRECTORY OUTPUT_DIRECTORY #
# 주의사항 : 만약 텍스트 파일의 문자열이 잘못된 것이라면 제대로 바꿀 수 없다.
################################################## ##

#만약 파라미터가 두개가 아니라면 에러메시지를 출력하고 종료한다.
if [ $# -ne 2 ]
then
echo "Please check the usage of `basename $0` "
exit 0
fi

#두번째 파라미터로 주어진 출력 디렉토리를 만든다.
if [ -d "$1" ]
then
mkdir -p $2
SOURCE=`basename $1`
TARGET=`basename $2`

else
echo "$1 is a not directory, please check the usage of $0"
exit 0
fi

#만약 source 디렉토리에 하위 디렉토리가 존재 한다면 그 디렉토리와 동일한
#디렉토리를 출력되는 디렉토리 안에 똑같이 만들어준다.
for subdir in `find $SOURCE -type d -print`
do
mkdir -p $TARGET/${subdir#$SOURCE}
done

#변환될 디렉토리의 파일들의 명칭을 각각 $name에 저장한다.
for name in `find $SOURCE -type f -print`
do
FILE_TYPE=`file -i $name`
IS_TEXT_STRING="$name: text/"

#각 파일들의 타입이 text 형식인지 확인한다.
#만약 text 파일이라면 $RESULT_STRING엔 공백문자(" ")가 들어가게 된다.
RESULT_STRING=`expr "$FILE_TYPE" : "\($IS_TEXT_STRING\)"`

if [[ -z $RESULT_STRING ]]
then
#만약 text 파일이 아니라면 변환하지 않고 그냥 복사한다.
cp $name $TARGET/${name#$SOURCE}
else
#만약 텍스트 파일이라면 인코딩을 변환한다.
#단 해당 파일이 EUC-KR일 때 제대로된 변환이 이루어진다.
iconv -f EUC-KR -t UTF-8 $name -o $TARGET/${name#$SOURCE}
fi
done
echo "변환이 끝났습니다. 웹문서라면 바뀐 텍스트에 \"EUC-KR\" 이나 \"euc-kr\"이 삽입되어 있는지 확인해보세요."
echo "확인방법은 다음과 같습니다."
echo
echo "grep euc-kr \`find target_dir -type f -print\`"
echo
exit 0

'Linux' 카테고리의 다른 글

[Linux]error: `TCP_NODELAY' undeclared 에러 발생시  (0) 2008.09.25
[Linux]vim UTF-8 encoding type 설정  (0) 2008.08.06
[make]make 사용법  (0) 2008.07.24
[Ubuntu]Samba 사용법  (0) 2008.07.18
[Linux]명령 (Command)  (0) 2008.07.15