일부 텍스트 파일에서 작은 bash 스크립트를 실행하고 있습니다.
find . -name "*.dat" -exec iconv --from-code='UTF-8' --to-code='ASCII//TRANSLIT' {} --output={} \;
내 컴퓨터는 Ubuntu 14.04 LTS입니다.
잠시 후, 파일에 있는 데이터의 절반이 줄/단어 중간에서 잘린 것처럼 보였습니다. signal 7
(내가 아는 한) 미스터리이거나 코어 덤프입니다 . 문제는 파일이 너무 크면 발생합니다. 내 파일 중 일부는 60kB보다 컸지만 iconv
결국 약 30kB가 되었습니다.
이 문제에 대해 어떻게 해야 합니까? 이것은 버그입니까? 해결책이 있나요? 발음 구별 부호를 음역하는 다른 편리한 방법이 있나요?
답변1
내 질문에 대한 의견에서 지적했듯이 문제는 두 가지 조건이 충족될 때 발생합니다.
- 소스 파일과 대상 파일이 동일합니다.
- 파일이 32768바이트보다 큽니다.
두 가지 해결 방법이 있습니다. 임시 파일을 변환하고 소스 파일을 자동으로 바꾸거나 recode
.
첫 번째 해결 방법은 예제를 참조하세요.https://unix.stackexchange.com/a/10243/94483. 에 대해서는 sponge
SO에 대한 매우 좋은 질문이 있습니다(https://stackoverflow.com/q/64860/362146) 여기에 대한 답변은 다음과 같습니다.https://unix.stackexchange.com/a/19980/94483
iconv
이제 더 적은 수의 문자 집합을 지원하기 위해 as를 사용할 예정입니다 recode
(그리고 이 기능도 작동시키지 못했습니다).
FILELIST=$(find . -type f -name "*.dat")
for file in $FILELIST
do
iconv --from-code='UTF-8' --to-code='ASCII//TRANSLIT' "$file" | sponge "$file"
done
sponge
교체 작업을 수행합니다. 에서더 많은 유틸리티.