6 votes

Est-il possible de renverser xxd pour obtenir le fichier d'origine à partir d'un fichier binaire

J'ai utilisé xxd pour créer une représentation hexadécimale d'un fichier (n'importe quel fichier comme .jpg, .docx, .zip, etc), comme ceci,..

$ xxd -p original_file.zip > hexa_format.txt

et pour inverser

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

si quelqu'un pense que ce n'est pas la bonne façon, merci de me corriger. Quoi qu'il en soit, ce n'est pas ma question. Maintenant je dois les convertir en binaire au lieu de l'hexadécimal. Donc la commande se présente comme ceci, si je ne me trompe pas.

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

ma question est,
comment puis-je le reconvertir en le fichier original à partir du fichier binaire (binary_format.txt) créé avec la commande ci-dessus. la page de manuel de xxd dit que cela ne peut pas être fait (à la dernière ligne).

-b | -bits
              Basculer vers un affichage binaire, au lieu de l'hexadécimal. Cette
              option écrit les octets sous forme de huit chiffres "1" et "0" au lieu d'une
              représentation hexadécimale normale. Chaque ligne est précédée d'un numéro
              en hexadécimal et suivie d'une représentation en ascii (ou ebcdic). Les options en ligne de commande -r, -p, -i ne fonctionnent pas dans ce
              mode.

si cela ne peut pas être fait, y a-t-il une autre commande qui peut le faire, comme enchaîner plusieurs commandes ainsi.

1 votes

xxd ne produit pas de fichiers binaires. Il produit des représentations textuelles de fichiers. Veuillez lire la page de manuel. Le format binaire mentionné ci-dessus est simplement les octets du fichier écrits en 1 et 0.

1voto

Henry Points 171

Vous devrez écrire votre propre fonction binaire en hexadécimal ...

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

Cela devrait produire le même format que -p qui peut ensuite être exécuté à travers -r. Si vous lisez la page de manuel de xxd, vous verrez qu'il n'y a pas de -r pour -b. C'est ce qui est indiqué dans l'extrait que vous avez inclus dans votre question.

0 votes

Est-ce que je dois placer ces lignes à l'intérieur d'un fichier et ensuite l'exécuter en tant que .sh,..?

0 votes

Cela ne récupérera pas le texte exact. Cela ajoute simplement une entrée sur chaque 60ème symbole!

0 votes

Vous pouvez le mettre dans un fichier ou sur la ligne de commande. Cela affichera le même format que -p : 60 valeurs hexadécimales par ligne.

0voto

Andreas Linnert Points 101

Vous modifiez la structure du fichier, vous ne pouvez donc pas facilement faire cela. Peut-être que quelque chose comme ceci peut aider (mais vous perdrez les caractères de nouvelle ligne) :

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

0 votes

Les cruches terminales renvoient ceci : awk : erreur d'exécution : pas assez d'arguments passés à printf("...%&'") FILENAME="bin_jpg.txt" FNR=59 NR=59. Mon utilisation est plus ou moins comme récupérer le fichier d'origine,

0 votes

Essayez de l'exécuter de cette manière : awk '{printf "%s" $8}' binary_format.txt >out_file

0 votes

Maintenant, l'erreur est, awk: erreur d'exécution: pas assez d'arguments passés à printf("%s......") FICHIER="bin_jpg.txt" FNR=1 NR=1.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X