UTF-8 시스템에서 잘못된 문자(Latin1)가 포함된 파일을 찾고 이름을 바꾸려면 어떻게 해야 합니까?

UTF-8 시스템에서 잘못된 문자(Latin1)가 포함된 파일을 찾고 이름을 바꾸려면 어떻게 해야 합니까?

내 UTF-8 시스템에서 유효하지 않은 이름을 가진 Latin1 기반 시스템의 일부 오래된 파일이 있습니다. 다양한 코드나 물음표로 나타납니다. 예를 들어:

/tmp/test $ ls -1
'FRg_Pause lecture_'$'\371''.png'
'FRg_Pause lecture_'$'\353''.png'
'FRg_Pause lecture_'$'\350''.png'
'FRg_Pause lecture_'$'\374''.png'

/tmp/test $ find .
./FRg_Pause lecture_?.png
./FRg_Pause lecture_?.png
./FRg_Pause lecture_?.png
./FRg_Pause lecture_?.png

/tmp/test $ tar cvfz test.tar.gz *.png
FRg_Pause lecture_\351.png
FRg_Pause lecture_\352.png
FRg_Pause lecture_\340.png
FRg_Pause lecture_\374.png

UTF-8 이름을 수정하기 위해 이름을 바꾸고 싶습니다. 예를 들어:

FRg_Pause lecture_\340.png -> FRg_Pause lecture_à.png

하지만 이름을 바꿔도 "FRg_Pause Lecture_340.png"가 작동할지는 모르겠습니다. 새 이름이 유효한 UTF-8인 한 우리 도구는 더 이상 불평하지 않습니다.

그러나 문제는 올바른 UTF-8 이름을 가진 파일이 많기 때문에 OS를 Latin1로 전환하여 작업을 완료할 수 없다는 것입니다. UTF-8이 아닌 파일(그리고 많은 디렉토리에 많은 파일이 있음)을 찾아서 해당 파일에 대해 몇 가지 작업을 수행해야 합니다.

어떤 아이디어가 있나요? 첫째, 파일을 찾기가 어렵다는 것을 알았습니다.

답변1

의견에 제안을 주신 Artem과 MC68020에게 감사드립니다.

불행히도 detox이것은 중복을 생성하려고 하기 때문에 작동하지 않습니다(예: \340\342다 에 매핑됨 a).

반면에 convmv작업은 올바르게 수행되었습니다.

/tmp/test $ convmv -f latin1 -t utf-8 -r . --notest
mv "./FRg_Pause lecture_�.png"  "./FRg_Pause lecture_ù.png"
mv "./FRg_Pause lecture_�.png"  "./FRg_Pause lecture_ë.png"
mv "./FRg_Pause lecture_�.png"  "./FRg_Pause lecture_è.png"
mv "./FRg_Pause lecture_�.png"  "./FRg_Pause lecture_ü.png"
mv "./FRg_Pause lecture_�.png"  "./FRg_Pause lecture_à.png"
mv "./FRg_Pause lecture_�.png"  "./FRg_Pause lecture_ê.png"
mv "./FRg_Pause lecture_�.png"  "./FRg_Pause lecture_é.png"
Ready! I converted 7 files in 0 seconds.

지금 NAS에 있는 수천 개의 파일 복구를 시작하세요 :)

관련 정보