“mv”文件的inode编号乱码?

Jas*_*per 8 shell character-encoding inode rename mv

我有几个文件在文件名中存在编码问题(德语变音,用 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
Run Code Online (Sandbox Code Playgroud)

我只能使用自动完成功能输入文件名。如何重命名文件?LibreOffice(或其他文件类型的其他程序)似乎无法读取受影响的文件,他们抱怨“没有这样的文件或设备”。

我在想mv --by-inode 12321475 Ergänzung.doc,但没有--by-inode开关mv。我还可以做些什么?

Mic*_*ant 15

你可以试试:

find . -inum 12321475 -exec mv {} new-filename \;
Run Code Online (Sandbox Code Playgroud)

或者

find . -inum 12321475 -print0 | xargs -0 mv -t new-filename
Run Code Online (Sandbox Code Playgroud)

通常我更喜欢 xargs 而不是 exec。谷歌为什么。不过这很棘手。参见Find -exec + vs find | 参数。选择哪一个?

  • 使用`xargs -0`,你不需要`find ... ` **`-print0`** 吗? (2认同)