Esto es lo que se me ocurrió:
int=65534
printf "0: %.8x" $int | xxd -r -g0 >>file
Ahora, dependiendo del endianismo, es posible que desee cambiar el orden de los bytes:
printf "0: %.8x" $int | sed -E 's/0: (..)(..)(..)(..)/0: \4\3\2\1/' | xxd -r -g0 >>file
Ejemplo (descodificado, por lo que es visible):
printf "0: %.8x" 65534 | sed -E 's/0: (..)(..)(..)(..)/0: \4\3\2\1/' | xxd -r -g0 | xxd
0000000: feff 0000 ....
Esto es para sin firmar int, si el int está firmado y el valor es negativo tienes que calcular el complemento a dos. Matemáticas simples.
Puede usar la siguiente función para convertir un VALOR numérico en su carácter correspondiente:
chr() {
printf \\$(printf '%03o' $1)
}
Debe convertir los valores de bytes individualmente, uno tras otro en el orden correcto (endianess) para la máquina/arquitectura que utiliza. Así que supongo que un poco de uso de otro lenguaje de secuencias de comandos que admita salida binaria haría el mejor trabajo.
Mira si esto funciona para ti
perl -e "print pack('L',`stat -c %s in.txt`)">>out.bin