czy można odwrócić xxd, aby uzyskać oryginalny plik z pliku binarnego?

3

używałem xxddo utworzenia reprezentacji heksa pliku (dowolnego pliku, takiego jak .jpg, .docx, .zip itp.), jak ten ...

$ xxd -p original_file.zip > hexa_format.txt

i odwrócić

$ xxd -r -p hexa_format.txt > original_file.zip

jeśli ktoś uważa, że ​​to nie jest właściwy sposób, popraw mnie. w każdym razie to nie moje pytanie. teraz muszę przekonwertować je na binarne zamiast hexa. więc polecenie działa tak, jeśli mam rację.

$ xxd -p -b original_file.zip > binary_format.txt

moje pytanie brzmi :
jak przywrócić go z powrotem do oryginalnego pliku z pliku binarnego (binary_format.txt) utworzonego z powyższego polecenia. strona podręcznika xxd mówi, że nie można tego zrobić (w ostatnim wierszu).

-b | -bits
              Switch to bits (binary digits) dump, rather than hexdump.   This
              option  writes octets as eight digits "1"s and "0"s instead of a
              normal hexadecimal dump. Each line is preceded by a line  number
              in  hexadecimal and followed by an ascii (or ebcdic) representa‐
              tion. The command line switches -r, -p, -i do not work with this
              mode.

jeśli nie można tego zrobić, czy istnieje inne polecenie, które może to zrobić. na przykład przesyłanie wielu wiadomości.

arvindh
źródło
xxdnie wyświetla plików binarnych. Generuje tekstowe reprezentacje plików. Proszę przeczytać stronę podręcznika. Wspomniany powyżej format binarny to tylko bajty pliku zapisane w jedynkach i zerach.
Allen

Odpowiedzi:

1

Będziesz musiał napisać własną funkcję binarną na szesnastkową ...

cut -f2-8 -d' ' infile | tr -d '\n' | tr ' ' '\n' | while read l; 
do 
  echo -n    $(bin_to_hex($l)) >> outfile
  (( ++n )) 
  (( n % 60 == 0)) && echo  "" >> outfile 
done

Powinno to wygenerować ten sam format, -pktóry można następnie uruchomić -r. Jeśli przeczytasz stronę podręcznika xxd, to przeczytasz, że nie ma -rdla niej -b. Jest tak na fragmencie, który umieściłeś w swoim pytaniu.

Allen
źródło
Czy powinienem umieścić te linie w pliku, a następnie uruchomić go jako .sh...?
arvindh
To nie odzyska dokładnego tekstu. Wystarczy dodać Enter na każdym 60. symbolu!
Romeo Ninov,
Możesz umieścić go w pliku lub w wierszu poleceń. Spowoduje to wyświetlenie tego samego formatu, co -p: 60 wartości szesnastkowych na linię.
Allen
Rozumiem, więc przepisujesz koder
Romeo Ninov
Terminal mówi bash: podstawienie polecenia: wiersz 18: błąd składni w pobliżu nieoczekiwanego tokena $l' bash: command substitution: line 18: bin_to_hex ($ l)) '
arvindh
0

Zmieniasz strukturę pliku, jeśli nie możesz tego łatwo zrobić. Może coś takiego może pomóc (ale stracisz znaki nowej linii:

awk '{printf $8}' binary_format.txt >out_file
Romeo Ninov
źródło
terminal odsuwa to od siebie: awk: run time error: not enough arguments passed to printf("...%&'") FILENAME="bin_jpg.txt" FNR=59 NR=59. Moje użycie przypomina mniej więcej odzyskiwanie oryginalnego pliku,
arvindh
spróbuj wykonać to w ten sposób: awk '{printf "% s" 8 $}' binary_format.txt> plik_wyjściowy
Romeo
teraz jest błąd, awk: run time error: not enough arguments passed to printf("%s......") FILENAME="bin_jpg.txt" FNR=1 NR=1.
arvindh
'{printf "% s", 8 $} I zaktualizuj swoją wersję awk, wygląda na to, że jest bardzo stara
Romeo Ninov
Dlaczego miałbyś być zainteresowany tylko ósmym polem?
Allen