大里です。 > From: Yoshitaka > Subject: [vine-users:072744] ランレベル1でのファイル名文字化け復元 > Date: 27 Aug 2005 18:21:57 +0900 > さて、ある程度のファイルのサルベージは出来たのですが、そのさい破損ファイルの > ログを収集する目的で、 > #cp -r /olddir /newdir >& /newdir/cplog.log > のコマンドでコピー記録をログ化しました。エラーファイルのリストはこれで捕れたの > ですが、その際日本語のディレクトリ名・ファイル名が化けてログ化されています。 > 例として"\245\244\245\363"のような「逆スラッシュ+数字」のコードに置き換わっています。 > > タイトルが紛らわしくて申し訳ないですが、書類名自体は化けることなく無事にコピー > されています。ランレベル1下で採ったログだけが化けている状態です。 日本語ファイル名が8進数表記にエンコードされてログに記録されてい るのです。復元する既製のフィルタがあったかどうか、ちょっと思いつか ないので、書いちゃいました。 たぶん perl を使うともっと簡単な気はしますが、とりあえず C で。 /* octchar.c * compile: octchar.c -o octchar * usage: octchar < filename */ #include <stdio.h> int main(void) { char buff[1024]; char *p; while (fgets(buff, 1024, stdin)){ p=buff; while (*p){ if (*p=='\\' && *(p+1)>='0' && *(p+1)<='3') printf("%c", (*(++p)-48)*64+(*(++p)-48)*8+*(++p)-48); else printf("%c", *p); p++; } } return 0; } ~$ cat cp.log `/hda15/TEST/\244\277\244\355\244\246\244\333\244\352\244\250\244\342\244\363.doc' -> `/hda15/TEST2/\244\277\244\355\244\246\244\333\244\352\244\250\244\342\244\363.doc' ~$ ./octchar < cp.log `/hda15/TEST/たろうほりえもん.doc' -> `/hda15/TEST2/たろうほりえもん.doc' -- kazz