![如何在 UTF-8 系统上查找(并重命名)包含无效字符 (Latin1) 的文件?](https://linux22.com/image/211529/%E5%A6%82%E4%BD%95%E5%9C%A8%20UTF-8%20%E7%B3%BB%E7%BB%9F%E4%B8%8A%E6%9F%A5%E6%89%BE%EF%BC%88%E5%B9%B6%E9%87%8D%E5%91%BD%E5%90%8D%EF%BC%89%E5%8C%85%E5%90%AB%E6%97%A0%E6%95%88%E5%AD%97%E7%AC%A6%20(Latin1)%20%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我从基于 Latin1 的系统中获得了一些旧文件,这些文件的名称在我的 UTF-8 系统上无效。它们显示为各种代码或问号。例如:
/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 名称,因此我无法将操作系统切换到 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 上的数千个文件:)