Converte o modo binário para o modo de texto e a opção inversa

6

Pela seguinte maneira eu converto um arquivo binário simples em um arquivo de texto

od –t x1 Check.tar | cut –c8- > Check.txt

Que fornece um conteúdo semelhante a:

 64 65 76 2f 6e 75 6c 6c 00 00 00 00 00 00 00 00
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 [...]

Qual é o caminho oposto para converter o Check.txt para Check.tar como o arquivo original

    
por maihabunash 26.05.2015 / 10:54

3 respostas

6
od -An -vtx1 Check.tar > Check.txt

Você precisa que -v ou od condensem sequências de bytes idênticos.

Pelo contrário:

LC_ALL=C tr -cd 0-9a-fA-F < Check.txt | xxd -r -p > Check.tar

Ou:

perl -ape '$_=pack "(H2)*", @F' Check.txt > Check.tar

Se o seu objetivo é transferir arquivos em um canal que suporta apenas texto ASCII, existem ferramentas dedicadas para isso, como uuencode :

tar cf - myfiles.* | xz | uuencode myfiles.tar.xz | that-channel 

E para recuperar esses arquivos do outro lado:

uudecode < file.uu

recriaria myfiles.tar.xz .

Ou:

uudecode -o - < file.uu | xz -d | tar xf -

Para extrair os arquivos.

    
por 26.05.2015 / 11:46
4

Respondendo a parte X deste problema XY, recomendo que você investigue o motivo pelo qual as transferências de arquivos binários não são transferidas corretamente.

Se a razão for porque você não tem um datapath de limpeza de 8 bits, poderá usar as ferramentas existentes que foram criadas para lidar com essa situação, como base64 ou mesmo uuencode . Antigo mas ainda muito eficaz.

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 -

ou

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 -
    
por 26.05.2015 / 12:54
1

No meu caso, eu não tinha xxd ou uudecode no dispositivo remoto, mas eu tive bash. Acabei com o seguinte:

Converta de binário para txt com:

od -An -vtx1 myfile.bin > myfile.txt

Em seguida, converta de txt para binário com:

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
    
por 22.01.2017 / 19:16