使用Samba安装上的奇怪名称重命名文件


10

我想将具有奇怪名称的文件重命名为合理的名称,但是我无法:/

$ mv *_000c.jpg 000c.jpg
mv: cannot move '?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

我已经尝试过使用互联网上一些地方推荐的索引节点号:

$ ls -il *000c.jpg
ls: '?j?Z?R?C1_000c.jpg': No such file or directory
213915 -rw-r--r-- 1 wolf wolf 794655 Jul 21  2012 '?j?Z?R?C1_000c.jpg'
$ find . -inum 213915 -print0 | xargs -0 -I '{}' mv '{}' 000c.jpg
mv: cannot move './?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

我该怎么办?


1
ls该目录中的简单输出是什么?文件显示为常规文件吗?我要求确保该No such file or directory错误是全局错误,而不表示文件系统已损坏。
terdon

1
我想知道是否需要运行文件系统fsck?我可能已损坏。文件是如何获得该名称的?
库萨兰达

1
@Mioriin文件名中的问号是(或者很可能是)无法显示字符的占位符。(永远不会解析输出的原因之一ls
库萨拉兰达

1
这可能是终端字体问题。它显示?无法显示的字母。尝试切换为完全unicode字体。
Mio Rin

5
@Mioriin我认为在这种情况下,是否可以显示文件名有点让人讨厌。奇怪的是,shell可以扩展,*_000c.jpg但是mv无法处理文件。恕我直言,这表明文件系统已损坏。...或者可能是已安装在已消失的网络共享上的文件系统(目录条目仍在缓存中)之类的东西。
Kusalananda

Answers:


16

相关意见摘要:

Unix文件系统允许文件名中的任何字符\0((nul)和/(正斜杠)除外。ls显示问号的事实仅是因为它无法在当前语言环境中显示文件名的某些字符(这是您应避免解析的输出ls的原因之一)。

但是,使用Samba共享,显然对文件名的要求比对标准Unix文件系统的要求更高。

由于该文件在中间Samba共享上的名称为“非法”,因此在安装该共享的计算机上,文件的正确名称无法访问。

mv名称无效,因为从Samba共享返回的用于扩展通配模式的名称不是托管文件系统上文件的实际名称,而只是Samba自己的变形名称。

您的解决方案是登录实际托管文件的服务器(在命名规则比Samba严格的文件系统上),并在那里更改文件名。这是正确的做法。

另请参阅有关该问题的Unix&Linux 聊天


-2

在了解有关在Unix shell中引用的信息之前,我将使用emacs的dired模式来重命名或删除难以匹配的文件。您只需在emacs中打开目录:

emacs -q .

...然后您可以使用箭头键导航到要修改的文件,然后使用来重命名该文件R?将为您提供可用命令的列表(您也可以删除难以匹配的文件)。

然后,您C-x C-c走出emacs的路就完成了。


-3

通常使用不寻常的文件名,您可以在文件名之前添加“ ./”,Linux会正确识别它。例如:$ ls ./?j?Z?R?C1_000c.jpg

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.