8.11.2011

Encode a binary file in UNIX

UNIX: バイナリファイルのエンコードコマンド

UNIX標準コマンド「uuencode」「uudecode」を使えば、
バイナリファイルをASCII文字列に変換(エンコード)したり、元に戻すことが可能である。

・基本的な使い方

$ uuencode /bin/pydoc pydoc
begin 755 pydoc
M(R$O=7-R+V)I;B]P>71H;VX*"FEM<&]R="!P>61O8PII9B!?7VYA;65?7R ]
>/2 G7U]M86EN7U\G.@H@(" @<'ED;V,N8VQI*"D*
 
end
$ uuencode pydoc < /bin/pydoc
begin 755 pydoc
M(R$O=7-R+V)I;B]P>71H;VX*"FEM<&]R="!P>61O8PII9B!?7VYA;65?7R ]
>/2 G7U]M86EN7U\G.@H@(" @<'ED;V,N8VQI*"D*
 
end

復元の時のために、実際のデータとは別に「ファイル名」を指定しないといけない。

・「-m」をつけると、Base64変換ができる

$ uuencode -m /bin/pydoc pydoc
begin-base64 755 pydoc
IyEvdXNyL2Jpbi9weXRob24KCmltcG9ydCBweWRvYwppZiBfX25hbWVfXyA9PSAnX19t
YWluX18nOgogICAgcHlkb2MuY2xpKCkK
====

・通常はエンコード結果をファイルに書き出して使う

$ date > date.txt
$ uuencode ./date.txt date.txt > ./date.enc
$ cat ./date.enc
begin 644 date.txt
L,C Q,>6YM# XYIR(,3'FEZ4@*.:<J"D@,C+FF8(T,.6(AC XYZ>2($I35 H
 
end
$ rm -i ./date.txt
rm: remove regular file `./date.txt'? y
$ uudecode ./date.enc
$ cat ./date.txt
2011年08月11日 (木) 22時40分08秒 JST

日付を出力した「date.txt」をエンコード。元ファイルを消してデコード。正しく復元できたことがわかる。

・圧縮してからエンコードすると、サイズを節約できる

$ gzip -c ./date.txt | uuencode date.txt > ./date.enc

参考:
http://x68000.q-e-d.net/~68user/unix/pickup?uuencode

0 件のコメント:

コメントを投稿