od -An -vtx1 Check.tar > Check.txt
Sie benötigen -v
oder od
komprimiert Sequenzen identischer Bytes.
Umgekehrt:
LC_ALL=C tr -cd 0-9a-fA-F < Check.txt | xxd -r -p > Check.tar
Oder:
perl -ape '$_=pack "(H2)*", @F' Check.txt > Check.tar
Wenn Sie Dateien über einen Kanal übertragen möchten, der nur ASCII-Text unterstützt, dann gibt es dafür spezielle Tools wie uuencode
:
tar cf - myfiles.* | xz | uuencode myfiles.tar.xz | that-channel
Und um diese Dateien am anderen Ende wiederherzustellen:
uudecode < file.uu
würde myfiles.tar.xz
neu erstellen .
Oder:
uudecode -o - < file.uu | xz -d | tar xf -
Um die Dateien zu extrahieren.
Um den X-Teil dieses XY-Problems zu beantworten, würde ich empfehlen, dass Sie untersuchen, warum Ihre Binärdateiübertragungen nicht richtig übertragen werden.
Wenn sich herausstellt, dass der Grund darin liegt, dass Sie keinen sauberen 8-Bit-Datenpfad haben, können Sie vorhandene Tools verwenden, die für diese Situation erstellt wurden, z. B. base64
oder sogar uuencode
. Alt, aber immer noch sehr effektiv.
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 -
oder
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 -
In meinem Fall hatte ich kein xxd oder uudecode auf dem Remote-Gerät, aber ich hatte bash. Am Ende kam ich zu folgendem Ergebnis:
Konvertieren Sie von binär nach txt mit:
od -An -vtx1 myfile.bin > myfile.txt
Konvertieren Sie dann zurück von txt zu binär mit:
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