od -An -vtx1 Check.tar > Check.txt
Potřebujete -v
nebo od
bude kondenzovat sekvence identických bajtů.
Opačně:
LC_ALL=C tr -cd 0-9a-fA-F < Check.txt | xxd -r -p > Check.tar
Nebo:
perl -ape '$_=pack "(H2)*", @F' Check.txt > Check.tar
Pokud je vaším účelem přenášet soubory přes kanál, který podporuje pouze text ASCII, pak pro to existují speciální nástroje jako uuencode
:
tar cf - myfiles.* | xz | uuencode myfiles.tar.xz | that-channel
A pro obnovení těchto souborů na druhém konci:
uudecode < file.uu
by znovu vytvořil myfiles.tar.xz
.
Nebo:
uudecode -o - < file.uu | xz -d | tar xf -
Chcete-li extrahovat soubory.
V odpovědi na část X tohoto problému XY bych vám doporučil prozkoumat důvod, proč se přenosy binárních souborů nepřenášejí správně.
Pokud se ukáže, že důvodem je to, že nemáte 8bitovou čistou datovou cestu, můžete použít existující nástroje, které byly vytvořeny pro řešení této situace, jako je base64
nebo dokonce uuencode
. Staré, ale stále velmi účinné.
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 -
nebo
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 -
V mém případě jsem na vzdáleném zařízení neměl xxd nebo uudecode, ale měl jsem bash. Skončil jsem s následujícím:
Převeďte z binárního na txt pomocí:
od -An -vtx1 myfile.bin > myfile.txt
Poté převeďte zpět z txt na binární pomocí:
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