Come creare un dump esadecimale di file contenente solo i caratteri esadecimali senza spazi in bash?

Come posso creare un dump esadecimale non modificato di un file binario in Linux usando bash? I comandi od e hexdump inseriscono entrambi spazi nel dump e questo non è l’ideale.

C’è un modo per scrivere semplicemente una lunga stringa con tutti i caratteri esadecimali, meno spazi o nuove righe nell’output?

xxd -p file

O se vuoi tutto su un’unica riga:

xxd -p file | tr -d '\n'

Le stringhe di formato possono far si che hexdump si comporti esattamente come lo vuoi (niente spazio vuoto, byte per byte):

 hexdump -ve '1/1 "%.2x"' 

1/1 significa “ogni formato viene applicato una volta e prende un byte”, mentre "%.2x" è la stringa di formato effettiva, come in printf. In questo caso: numero esadecimale di 2 caratteri, zero iniziale se inferiore.

Sembra dipendere dai dettagli della versione di od . Su OSX, usa questo:

 od -t x1 -An file |tr -d '\n ' 

(Questo è stampato come tipo esadecimale, senza indirizzo. E lo spazio bianco cancellato in seguito, ovviamente.)

Perl one-liner:

 perl -e 'local $/; print unpack "H*", <>' file 

Le altre risposte sono preferibili, ma per una pura soluzione Bash, ho modificato lo script nella mia risposta qui per essere in grado di generare un stream continuo di caratteri esadecimali che rappresentano il contenuto di un file. (La sua modalità normale è quella di emulare hexdump -C .)