Questo è quello che potrei inventare:
int=65534
printf "0: %.8x" $int | xxd -r -g0 >>file
Ora, a seconda dell'endianità, potresti voler scambiare l'ordine dei byte:
printf "0: %.8x" $int | sed -E 's/0: (..)(..)(..)(..)/0: \4\3\2\1/' | xxd -r -g0 >>file
Esempio (decodificato, quindi è visibile):
printf "0: %.8x" 65534 | sed -E 's/0: (..)(..)(..)(..)/0: \4\3\2\1/' | xxd -r -g0 | xxd
0000000: feff 0000 ....
Questo è per unsigned int, se l'int è signed and il valore è negativo devi calcolare il complemento a due. Matematica semplice.
È possibile utilizzare la seguente funzione per convertire un VALORE numerico nel carattere corrispondente:
chr() {
printf \\$(printf '%03o' $1)
}
Devi convertire i valori dei byte singolarmente, uno dopo l'altro nell'ordine corretto (endianess) per la macchina/architettura che usi. Quindi immagino che un piccolo uso di un altro linguaggio di scripting che supporti l'output binario farebbe il lavoro migliore.
Vedi se funziona per te
perl -e "print pack('L',`stat -c %s in.txt`)">>out.bin