od -An -vtx1 Check.tar > Check.txt
Hai bisogno di -v
o od
condenserà sequenze di byte identici.
Per il rovescio:
LC_ALL=C tr -cd 0-9a-fA-F < Check.txt | xxd -r -p > Check.tar
Oppure:
perl -ape '$_=pack "(H2)*", @F' Check.txt > Check.tar
Se il tuo scopo è trasferire file su un canale che supporta solo il testo ASCII, allora ci sono strumenti dedicati come uuencode
:
tar cf - myfiles.* | xz | uuencode myfiles.tar.xz | that-channel
E per recuperare quei file dall'altra parte:
uudecode < file.uu
creerebbe myfiles.tar.xz
.
Oppure:
uudecode -o - < file.uu | xz -d | tar xf -
Per estrarre i file.
Rispondendo alla parte X di questo problema XY, ti consiglierei di indagare sul motivo per cui i tuoi trasferimenti di file binari non vengono trasferiti correttamente.
Se si scopre che il motivo è perché non si dispone di un percorso dati pulito a 8 bit, è possibile utilizzare gli strumenti esistenti creati per gestire questa situazione, come base64
o anche uuencode
. Vecchio ma ancora molto efficace.
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 -
Nel mio caso non avevo xxd o uudecode sul dispositivo remoto ma avevo bash. Ho finito con quanto segue:
Converti da binario a txt con:
od -An -vtx1 myfile.bin > myfile.txt
Quindi riconverti da 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