私はxxd
を使用して、このようなファイル(.jpg、.docx、.Zipなどのファイル)の16進表現を作成しています。
$ xxd -p original_file.Zip > hexa_format.txt
と逆に
$ xxd -r -p hexa_format.txt > original_file.Zip
これが適切な方法ではないと誰かが感じた場合は、私を訂正してください。とにかくこれは私の質問ではありません。今、私はそれらをヘキサではなくバイナリに変換する必要があります。したがって、imが正しければ、コマンドは次のようになります。
$ xxd -p -b original_file.Zip > binary_format.txt
私の質問は、
上記のコマンドで作成したバイナリファイル(binary_format.txt)から元のファイルに戻すにはどうすればよいですか。 xxdのmanページには、実行できないと書かれています(最後の行)。
-b | -bits
Switch to bits (binary digits) dump, rather than hexdump. This
option writes octets as eight digits "1"s and "0"s instead of a
normal hexadecimal dump. Each line is preceded by a line number
in hexadecimal and followed by an ascii (or ebcdic) representa‐
tion. The command line switches -r, -p, -i do not work with this
mode.
これを実行できなかった場合、それを実行できる他のコマンドはありますか。複数のコマンドを配管するようなものです。
独自のバイナリを16進関数に書き込む必要があります...
cut -f2-8 -d' ' infile | tr -d '\n' | tr ' ' '\n' | while read l;
do
echo -n $(bin_to_hex($l)) >> outfile
(( ++n ))
(( n % 60 == 0)) && echo "" >> outfile
done
これにより、-p
と同じ形式が出力され、-r
を介して実行できます。 xxd
のマニュアルページを読むと、-r
には-b
がないことがわかります。それはあなたがあなたの質問に含めた抜粋にそう言っています。
ファイルの構造を変更しますが、これを簡単に行うことはできません。たぶんこのようなものが役立つかもしれません(しかしあなたは改行文字を失うでしょう:
awk '{printf $8}' binary_format.txt >out_file