vine-users ML アーカイブ



[vine-users:072747] Re: ランレ ベル1でのフ ァイル名文字化け復元

  • From: "OOSATO,Kazzrou" <kazz@xxxxxxxxxxxxxx>
  • Subject: [vine-users:072747] Re: ランレ ベル1でのフ ァイル名文字化け復元
  • Date: Sat, 27 Aug 2005 22:44:21 +0900
大里です。

> 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