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 -
ファイルを抽出します。
この 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 -
私の場合、リモート デバイスに 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