동일한 파일 이름을 유지하면서 디렉토리의 .xml 파일을 UTF-8로 대량 변환하는 방법


0

ISO-8859-1로 인코딩 된 많은 .xml 파일이 있으며 UTF-8로 모두 원합니다.

개별적으로 변환하는 코드를 알아 냈습니다.

iconv -f ISO-8859-1 -t UTF-8 filename.xml > newfilename.xml

잘 작동합니다.

내가 알고 싶은 것은 셸 스크립트를 작성하여 디렉토리의 모든 .xml 파일을 자동으로 정리 한 다음 이전 파일을 새로운 변환 파일로 바꾸지 만 여전히 동일한 파일 이름을 유지하는 방법입니다.

쉘 스크립팅을 처음 사용하므로 도움을 주시면 감사하겠습니다.


파일의 시작 부분에서 XML 선언을 변경하지 않고 복사하므로 안전하지 않습니다. 새 인코딩을 반영하도록 XML 선언을 변경해야합니다.
Michael Kay

SED를 사용 sed -i 's/olddec/newdec/g'하면됩니다. iconv 줄 앞에 for 루프에 삽입하면됩니다
Fegnoid

답변:


2

bash 쉘의 명령 줄 에서이 작업을 수행 할 수 있습니다

for i in *.xml; do
    iconv -f ISO-8859-1 -t UTF-8 "$i" > "$i.1" && mv "$i.1" "$i"
done

기본적으로 모든 xml 파일을 가져와 Iconv를 통해 filname.xml.1에 넣은 다음 해당 파일을 원래 파일 이름으로 다시 옮깁니다.

iconv를 간략히 살펴보고 여기에 무엇이 있어야하는지 (GNU 버전을 사용하는 경우)

for i in *.xml; do
    iconv -sc -f ISO-8859-1 -t UTF-8 "$i" > "$i.1" && mv "$i.1" "$i"
done

-s 옵션은 경고를 끄고 -c 옵션은 출력에서 ​​유효하지 않은 문자를 생략합니다.


안녕 Fegnoid, 코드가 작동했지만 첫 번째 문자 시퀀스가 ​​잘못 될 때까지 실행 된 것으로 보이며 나머지 행을 삭제 한 후 예를 들어 올바르지 않은 첫 번째 문자가 5000 행에 있었으며 수정 한 다음 모든 것을 삭제했습니다. 라인은 35000 라인에 가깝습니다. 왜 그런 짓을했는지 아십니까?
Tren September

그것은 iconv와 더 관련이있을 수 있습니다 ... 내가 인정해야 할 점은 거의 몰라
Fegnoid

@Fegnoid : 시도 레코딩을 그것은 가지고 -force옵션을 선택합니다. "이 옵션을 사용하면 돌이킬 수없는 또는 잘못된 기록이 완료 될 때까지 실행됩니다 . " 한 번에 여러 파일에서 작업 할 수도 있습니다.
RedGrittyBrick

내 대답에 -sc 옵션을 추가했습니다. 완료 될 때까지 실행해야합니다.
Fegnoid
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.