我想將具有奇怪名稱的文件重命名為合理的名稱,但是我無法:/
$ 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
相關評論摘要:
Unix 檔案系統允許檔案名稱中包含\0
(nul) 和/
(正斜線)以外的任何字元。顯示問號的事實ls
只是因為它無法顯示當前語言環境中檔案名稱的某些字元(這也是原因之一你應該避免解析輸出ls
)。
然而,對於 Samba 共享,您顯然對檔案名稱有比標準 Unix 檔案系統更嚴格的要求。
由於該檔案在中間 Samba 共用上的名稱是「非法」的,因此在安裝共用的電腦上無法透過其正確名稱存取該檔案。
這mv
不起作用,因為從 Samba 共享返回的用於擴展通配模式的名稱不是託管檔案系統上檔案的實際名稱,而只是 Samba 自己的名稱損壞版本。
您的解決方案是登入實際託管該檔案的伺服器(在命名規則比 Samba 限制更少的檔案系統上)並更改那裡的檔案名稱。這是正確的做法。
另請參閱 Unix&Linux聊聊這個問題。
答案2
在學習 unix shell 中的引用之前,我會使用 emacsdired
模式來重新命名或刪除難以匹配的檔案。您只需在 emacs 中開啟該目錄:
emacs -q .
....然後您可以使用箭頭鍵導航到要修改的文件並將該文件重命名為R
. ?
將為您提供可用命令的清單(您也可以刪除難以匹配的檔案)。
然後你就C-x C-c
可以退出 emacs 了。
答案3
通常,對於不常見的檔案名,您可以在檔案名稱前加上“./”,Linux 將正確識別它。例如: $ ls ./?j?Z?R?C1_000c.jpg