web-dev-qa-db-ja.com

Sambaマウントで奇妙な名前でファイルの名前を変更する

変な名前のファイルの名前を適切な名前に変更したいのですが、次のことはできません:/

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

インターネット上のいくつかの場所で推奨されていたように、iノード番号を使用してみました。

$ 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

私は何をすべきか?

10
graywolf

関連コメントの要約:

Unixファイルシステムでは、\0(nul)および/(スラッシュ)以外の任意の文字をファイル名に使用できます。 lsに疑問符が表示されるのは、現在のロケールでファイル名の一部の文字を表示できないためだけです(これは、理由の1つです ls )。

ただし、Samba共有では、標準のUnixファイルシステムよりもファイル名に厳しい要件があるようです。

ファイルには中間Samba共有で「不正」な名前が付けられていたため、共有をマウントしているマシンでは正しい名前でファイルにアクセスできませんでした。

mvは機能しませんでした。グロビングパターンの拡張のためにSamba共有から返された名前は、ホスティングファイルシステム上の実際のファイル名ではなく、Samba独自のマングルバージョンの名前のみでした。

あなたの解決策は、実際にファイルをホストしているサーバーにログインし(Sambaよりも制限の少ない命名規則を持つファイルシステム上)、そこでファイルの名前を変更することでした。これは正しい行動方針でした。

Unix&Linux この質問についてチャット も参照してください。

16
Kusalananda