“mv”文件的 inode 编号名称出现乱码?

“mv”文件的 inode 编号名称出现乱码?

我有几个文件的文件名存在编码问题(德语元音变音,用 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

但正如已经指出的那样,无论如何都没有必要。

相关内容