GNU/Linux >> Linux の 問題 >  >> Linux

バイナリ モードをテキスト モードに変換し、その逆のオプション

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

Linux
  1. [[$ a ==Z*]]と[$a==Z *]の違いは?

  2. すべてのテキストを大文字から小文字に、またはその逆に変換しますか?

  3. tar.gz と tgz は同じものですか?

  1. テキストファイルを Shift JIS から UTF-8 に変換し、端末から戻す方法

  2. Linux の file コマンドがテキスト ファイルをバイナリ データとして報告する原因は何ですか?

  3. 16 進文字列をバイナリに変換し、netcat で送信します

  1. Ls *、Ls**およびLs***の結果?

  2. なぜ(そしてどのように)バイナリファイルでCatを使用したのですか?

  3. Windows と Unix/Linux 形式の間でテキスト ファイルの改行を変換する方法は?