Можно ли отменить xxd, чтобы получить оригинальный файл из двоичного файла

Я использовал xxd создать гекса-представление файла (любой файл, например.jpg, .docx, .zip и т. д.), например,..

$ xxd -p original_file.zip > hexa_format.txt

и повернуть вспять

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

если кто-то считает, что это не правильно, поправьте меня. во всяком случае, это не мой вопрос. Теперь я должен преобразовать их в двоичный файл вместо гекса. так что команда идет так, если я прав.

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

мой вопрос
Как мне вернуть его обратно в исходный файл из двоичного файла (binary_format.txt), созданного из приведенной выше команды. Страница man xxd говорит, что это невозможно сделать (в последней строке).

-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.

Если это не может быть сделано, есть ли другая команда, которая может это сделать. как обвязка нескольких комадов так.

2 ответа

Решение

Вам нужно написать свою собственную двоичную функцию в шестнадцатеричную...

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

Это должно вывести тот же формат, что и -p который затем можно прогнать -r, Если вы читаете справочную страницу для xxd вы прочтете что нет -r за -b, Так говорится в выдержке, которую вы включили в свой вопрос.

Вы изменяете структуру файла, если вам нелегко сделать это. Может быть, что-то вроде этого может помочь (но вы потеряете символы новой строки:

awk '{printf $8}' binary_format.txt >out_file
Другие вопросы по тегам