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


2

я использовал 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

мой вопрос ,
Как мне вернуть его обратно в исходный файл из двоичного файла (двоичный формат.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.

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


xxd не выводит двоичные файлы. Он выводит текстовые представления файлов. Пожалуйста, прочитайте страницу руководства. Упомянутый выше двоичный формат - это просто байты файла, записанные в 1 и 0.
Allen

Ответы:


0

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

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, Так говорится в выдержке, которую вы включили в свой вопрос.


Должен ли я поместить эти строки в файл, а затем запустить его как .sh, ..?
arvindh

Это не восстановит точный текст. Просто добавьте ввод на каждый 60-й символ!
Romeo Ninov

Вы можете поместить его в файл или в командную строку. Это выведет тот же формат, что и -p: 60 шестнадцатеричных значений на строку.
Allen

Понятно, чтобы вы переписали кодер
Romeo Ninov

Терминал говорит: bash: подстановка команд: строка 18: синтаксическая ошибка рядом с неожиданным токеном $l' bash: command substitution: line 18: bin_to_hex ($ л))»
arvindh

0

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

awk '{printf $8}' binary_format.txt >out_file

Терминал корыто обратно это: awk: run time error: not enough arguments passed to printf("...%&'") FILENAME="bin_jpg.txt" FNR=59 NR=59. Мое использование более или менее похоже на восстановление исходного файла,
arvindh

попробуйте выполнить его следующим образом: awk '{printf "% s" $ 8}' binary_format.txt & gt; out_file
Romeo Ninov

теперь ошибка awk: run time error: not enough arguments passed to printf("%s......") FILENAME="bin_jpg.txt" FNR=1 NR=1,
arvindh

'{printf "% s", $ 8}' И обновите вашу версию awk, кажется, она очень старая
Romeo Ninov

Почему вас интересует только восьмое поле?
Allen
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.