web-dev-qa-db-ja.com

xxdを逆にしてバイナリファイルから元のファイルを取得することは可能ですか?

私は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.

これを実行できなかった場合、それを実行できる他のコマンドはありますか。複数のコマンドを配管するようなものです。

4
arvindh

独自のバイナリを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がないことがわかります。それはあなたがあなたの質問に含めた抜粋にそう言っています。

1
Allen

ファイルの構造を変更しますが、これを簡単に行うことはできません。たぶんこのようなものが役立つかもしれません(しかしあなたは改行文字を失うでしょう:

awk '{printf $8}' binary_format.txt >out_file
0
Romeo Ninov