奇妙な文字でファイル名を変更する方法

奇妙な文字でファイル名を変更する方法

ギリシャ語またはキリル文字を含むファイルがあります。

それは私のものではなく、Webサーバーユーザー(www)のものです。

シェルをWebサーバーユーザー(www)やrootとして使用することはできませんでしたが、(Webサーバーユーザーによって実行された)スクリプトを使用してmodbitsディレクトリを777に、ファイル自体を666に設定しました。

ファイル名を変更または削除できません。 inodeを使用し、次を使用してもfind

$ ls -i1
19120017 Idezbox - коробка.jpeg

$ find . -inum 19120017 -exec mv -i {} sane \;
mv: cannot move `./Idezbox - коробка.jpeg' to `sane': No such file or directory

ワイルドカードに失敗しました:

$ mv Idezbox*.jpeg sane
mv: cannot move `Idezbox - коробка.jpeg' to `sane': No such file or directory

次のPerlスクリプトも失敗します。

find . -type f -print0 | \
perl -n0e '$new = $_; if($new =~ s/[^[:ascii:]]/x/g) {
  print("Renaming $_ to $new\n");
  rename($_, $new);
}'

次のように印刷されます。

Renaming Idezbox - коробка.jpeg to Idezbox - xxxxxxxxxxxxxx.jpeg

ただし、後続の名前変更コマンドは効果がありません。
しかし、7つのギリシャ文字と14の「x」-esがあることに注意してください。

上記のディレクトリに移動して「ごみ箱」を削除してみてください。

$ rm -riv Junk
rm: descend into directory `Junk'? yes
rm: cannot remove `Junk/Idezbox - коробка.jpeg': No such file or directory

いくつかの要求された出力:

$ mount | grep "on /ifi/asgard/k00"
asgard:/ifi/asgard/k00 on /ifi/asgard/k00 type nfs (rw,tcp,rsize=32768,wsize=32768,hard,intr,addr=xxx.xxx.xxx.xxx)

$ df .
Filesystem           1K-blocks      Used Available Use% Mounted on
asgard:/ifi/asgard/k00
                     104857600  53201568  51656032  51% /ifi/asgard/k00
$ ls -al
total 88
drwxrwxrwx  2 www     ifiweb   4096 2014-08-11 14:16 .
drwxrwsrwx 14 inf5270 inf5270  4096 2014-08-11 14:15 ..
-rw-rw-rw-  1 www     ifiweb  35176 2012-04-14 13:38 Idezbox - коробка.jpeg
-rwxrw-r--  1 gisle   ifi-a     139 2014-08-11 14:15 perl-rename.sh

$ who ami i
gisle    pts/122      2014-08-11 11:37 (safir.ifi.uio.no:13.0)

すべてのコメントと回答(すべてありがとう!)を読んだ後は、もはやこれがキリル文字をエスケープしたり引用したりするわけではないと思います。 NFSの視点を見てください。

2015年10月2日に修正:

問題はNFSに関連することが判明しました。ファイルはNFSマウントボリューム(別のコンピュータからのアクセス)に直接作成されるため、何の効果もありません。 rootとしてサーバーに直接ログインすると、システム管理者(私はこの特定のシステムのユーザーだけなので、これを行うことはできません)がファイルを削除できます(ギリシャ文字をエスケープする標準的な方法を使用します)。ありがとうG-マン(コメントから)私を追跡し続けます。もしG-マンそれでも彼の意見を答えに変えれば受け入れます。

ベストアンサー1

私はこれが古いことを知っていますが、奇妙な文字でファイル名を変更するには、次のように使用できます。

find . -inum INODE -exec rename {} NEW_NAME \;

したがって、この場合は次のものを使用できます。

find . inum 19120017 -exec rename {} sane \;

おすすめ記事