我有几个文件的文件名存在编码问题(德语元音变音,用 Windows 刻录在 CD 上,由 Windows 读取并用 Seafile 同步到 Linux。有些地方出了问题...)。 Bash 和 zsh 只显示“?”而不是元音变音,stat
显示类似
$ stat Erg�nzung.doc
File: ‘Erg\344nzung.doc’
Size: 2609152 Blocks: 5096 IO Block: 4096 regular file
Device: 806h/2054d Inode: 12321475 Links: 1
我只能通过自动补全输入文件名。如何重命名该文件? LibreOffice(或其他文件类型的其他程序)似乎无法读取受影响的文件,他们抱怨“没有这样的文件或设备”。
我也想过mv --by-inode 12321475 Ergänzung.doc
,但是没有--by-inode
开关mv
。我还可以做些什么?
答案1
你可以尝试:
find . -inum 12321475 -exec mv {} new-filename \;
或者
find . -inum 12321475 -print0 | xargs -0 mv -t new-filename
一般来说,我更喜欢 xargs 而不是 exec。谷歌一下为什么。但这很棘手。看查找 -exec + 与 find | xargs。选择哪一个?
答案2
convmv
对于此类问题有一个实用程序。它允许您将文件名的编码从 windows 更改cp1256
为 utf8 等。
答案3
仅供记录,正确xargs -0
用法是:
find . -inum 12321475 -print0 | xargs -0 -I '{}' mv '{}' new-filename
但正如已经指出的那样,无论如何都没有必要。