GNU/Linux >> Znalost Linux >  >> Linux

Převeďte binární režim na textový režim a možnost obrácení

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

Linux
  1. Rozdíl mezi [[ $a ==Z* ]] a [ $a ==Z* ]?

  2. Převést veškerý text z velkých na malá písmena a naopak?

  3. Použití find a tar se soubory se speciálními znaky v názvu

  1. Jak převést textový soubor z Shift JIS na UTF-8 a zpět z terminálu

  2. převést hex řetězec na binární a odeslat pomocí netcat

  3. Jak mohu převést dvouhodnotová textová data na binární (bitová reprezentace)

  1. Výsledek Ls *, Ls ** a Ls ***?

  2. Jak převést konce řádků v textovém souboru mezi formáty Windows a Unix/Linux?

  3. Správný způsob použití volby --remove-files s TAR