od -An -vtx1 Check.tar > Check.txt
Anda membutuhkan -v
atau od
akan memadatkan urutan byte identik.
Sebaliknya:
LC_ALL=C tr -cd 0-9a-fA-F < Check.txt | xxd -r -p > Check.tar
Atau:
perl -ape '$_=pack "(H2)*", @F' Check.txt > Check.tar
Jika tujuan Anda adalah mentransfer file melalui saluran yang hanya mendukung teks ASCII, maka ada alat khusus untuk itu seperti uuencode
:
tar cf - myfiles.* | xz | uuencode myfiles.tar.xz | that-channel
Dan untuk memulihkan file-file itu di ujung lain:
uudecode < file.uu
akan membuat ulang myfiles.tar.xz
.
Atau:
uudecode -o - < file.uu | xz -d | tar xf -
Untuk mengekstrak file.
Menjawab bagian X dari masalah XY ini, sebaiknya Anda menyelidiki alasan transfer file biner Anda tidak tertransfer dengan benar.
Jika ternyata alasannya adalah karena Anda tidak memiliki jalur data bersih 8-bit, Anda dapat menggunakan alat yang sudah ada yang dibuat untuk menangani situasi ini, seperti base64
atau bahkan uuencode
. Tua tapi masih sangat efektif.
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 -
atau
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 -
Dalam kasus saya, saya tidak memiliki xxd atau uudecode pada perangkat jarak jauh tetapi saya memiliki bash. Saya berakhir dengan yang berikut:
Konversikan dari biner ke txt dengan:
od -An -vtx1 myfile.bin > myfile.txt
Kemudian konversikan kembali dari txt ke biner dengan:
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