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

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

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

$ 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

どうすればいいですか?

答え1

関連するコメントの要約:

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

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

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

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

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

Unix&Linuxも参照この質問についてチャットする

答え2

Unix シェルで引用符を使うことを学ぶ前は、dired一致しにくいファイルの名前を変更したり削除したりするのに、emacs モードを使用していました。emacs でディレクトリを開くだけです。

emacs -q .

...次に、矢印キーを使用して変更するファイルに移動し、 . を使用してファイルの名前を変更しますR?使用可能なコマンドのリストが表示されます (一致しにくいファイルを削除することもできます)。

その後、C-x C-cemacs を終了すれば完了です。

答え3

珍しいファイル名の場合は、ファイル名の前に「./」を追加すると Linux が適切に認識することがよくあります。例: $ ls ./?j?Z?R?C1_000c.jpg

関連情報