Rename

在 Samba 掛載上用奇怪的名稱重命名文件

  • April 12, 2017

我想將具有奇怪名稱的文件重命名為合理的名稱,但是我無法:/

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

我嘗試使用網際網路上幾個地方推薦的 inode 編號:

$ 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

我該怎麼辦?

相關評論摘要:

Unix 文件系統允許在文件名中使用除\0(nul) 和/(正斜杠) 之外的任何字元。ls顯示問號的事實只是因為它無法在目前語言環境中顯示文件名的某些字元(這是您應該避免解析輸出的ls原因之一)。

但是,使用 Samba 共享,您對文件名的要求顯然比標準 Unix 文件系統更嚴格。

由於該文件的名稱在您的中間 Samba 共享上是“非法的”,因此在安裝共享的機器上無法通過其正確名稱訪問該文件。

mv不起作用,因為從 Samba 共享返回的用於擴展 globbing 模式的名稱不是託管文件系統上文件的實際名稱,只是 Samba 自己的名稱錯位版本。

您的解決方案是登錄到實際託管文件的伺服器(在命名規則比 Samba 限制較少的文件系統上)並在那裡更改文件的名稱。這是正確的做法。

另請參閱有關此問題的 Unix&Linux 聊天

引用自:https://unix.stackexchange.com/questions/358561