大里です。
> 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