奇妙な名前のファイルの名前を合理的な名前に変更したいが、それはできません。
$ 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
関連コメントの要約:
Unixファイルシステムでは、\0
(nul)と(スラッシュ)を除く/
すべての文字をファイル名に使用できます.疑問符が表示されるのは、ls
単に現在のロケールではファイル名に特定の文字を表示できないためです(これも理由の1つです)。出力を解析しないでください。ls
)。
ただし、Samba共有を使用すると、標準のUnixファイルシステムよりもファイル名の要件が厳しくなります。
中間Samba共有のファイル名が「違法」なので、共有がマウントされているシステムは正しい名前でファイルにアクセスできません。
mv
拡張ワイルドカードパターンのSamba共有から返された名前は、管理対象ファイルシステム上のファイルの実際の名前ではなく、Samba独自の名前の無効なバージョンなので、機能しません。
解決策は、実際にファイルをホストしているサーバー(Sambaよりも制限の少ない命名規則を使用するファイルシステム)にログインし、そこでファイル名を変更することです。これが正しいことです。
追加情報UnixとLinuxこの問題について話しましょう。
答え2
Unixシェルで引用する方法を学ぶ前に、私はemacsdired
パターンを使用して一致しにくいファイルの名前を変更または削除しました。 Emacsでディレクトリを開くだけです。
emacs -q .
...その後、矢印キーを使用して変更したいファイルに移動し、ファイル名をに変更できますR
。 ?
利用可能なコマンドのリストが提供されます(一致しにくいファイルを削除することもできます)。
その後、C-x C-c
emacsを終了できます。
答え3
通常、珍しいファイル名の場合、ファイル名の前に「./」を追加すると、Linuxはそれを正しく認識します。例: $ ls ./?j?Z?R?C1_000c.jpg