我从基于 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 上的数千个文件:)