単純なバイナリファイルをテキストファイルに変換します。
od –t x1 Check.tar | cut –c8- > Check.txt
その内容は次のようになります。
64 65 76 2f 6e 75 6c 6c 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[...]
反対のアプローチは何ですか? Check.txtを元のファイルにCheck.tarに変換するのですか?
答え1
od -An -vtx1 Check.tar > Check.txt
同じバイトシーケンスが必要-v
または圧縮されます。od
その逆:
LC_ALL=C tr -cd 0-9a-fA-F < Check.txt | xxd -r -p > Check.tar
または:
perl -ape '$_=pack "(H2)*", @F' Check.txt > Check.tar
ASCIIテキストのみをサポートするチャンネルを介してファイルを転送したい場合は、次の特殊なツールを使用できますuuencode
。
tar cf - myfiles.* | xz | uuencode myfiles.tar.xz | that-channel
そして、反対側から次のファイルを復元します。
uudecode < file.uu
再生成されますmyfiles.tar.xz
。
または:
uudecode -o - < file.uu | xz -d | tar xf -
ファイルの抽出中。
答え2
このXY質問のX部分に答えるには、バイナリファイル転送が正しく送信されない理由を調べることをお勧めします。
8ビットのクリーンなデータパスがないため、その理由がわかったら、この状況を処理するために作成された既存のツール(たとえば)を使用できますbase64
。uuencode
古いですが、まだ非常に効果的です。
tar czvf - /etc/h* | base64 >/tmp/tar.tgz.b64
ls -l /tmp/tar.tgz.b64
-rw-r--r-- 1 root root 7364 May 26 11:52 /tmp/tar.tgz.b64
...
base64 -d /tmp/tar.tgz.b64 | tar tzvf -
または
tar czvf - /etc/h* | uuencode - >/tmp/tar.tgz.uue
ls -l /tmp/tar.tgz.uue
-rw-r--r-- 1 root root 7530 May 26 11:51 /tmp/tar.tgz.uue
...
uudecode /tmp/tar.tgz.uue | tar xzvf -
答え3
私の場合、リモートデバイスにxxdやuudecodeはありませんが、bashはあります。私は次のような結果を得ました。
バイナリからtxtへの変換:
od -An -vtx1 myfile.bin > myfile.txt
次に、次のコマンドを使用してtxtをバイナリに戻します。
while read p; do
IFS=' ' read -r -a array <<< "$p"
for index in "${!array[@]}"
do
echo -en "\x${array[index]}"
done
done < myfile.txt > myfile.bin