od -An -vtx1 Check.tar > Check.txt
Necesitas -v
o od
condensará secuencias de bytes idénticos.
Para el reverso:
LC_ALL=C tr -cd 0-9a-fA-F < Check.txt | xxd -r -p > Check.tar
O:
perl -ape '$_=pack "(H2)*", @F' Check.txt > Check.tar
Si su propósito es transferir archivos a través de un canal que solo admite texto ASCII, existen herramientas dedicadas para eso como uuencode
:
tar cf - myfiles.* | xz | uuencode myfiles.tar.xz | that-channel
Y para recuperar esos archivos en el otro extremo:
uudecode < file.uu
recrearía myfiles.tar.xz
.
O:
uudecode -o - < file.uu | xz -d | tar xf -
Para extraer los archivos.
Respondiendo a la parte X de este problema XY, le recomendaría que investigue la razón por la que sus transferencias de archivos binarios no se transfieren correctamente.
Si resulta que el motivo es que no tiene una ruta de datos limpia de 8 bits, puede usar las herramientas existentes que se crearon para manejar esta situación, como base64
o incluso uuencode
. Antiguo pero aún muy efectivo.
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 -
o
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 -
En mi caso no tenía xxd ni uudecode en el dispositivo remoto pero sí bash. Terminé con lo siguiente:
Convierte de binario a txt con:
od -An -vtx1 myfile.bin > myfile.txt
Luego vuelva a convertir de txt a binario con:
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