Voici ce que j'ai pu trouver :
int=65534
printf "0: %.8x" $int | xxd -r -g0 >>file
Maintenant, en fonction de l'endianité, vous voudrez peut-être échanger l'ordre des octets :
printf "0: %.8x" $int | sed -E 's/0: (..)(..)(..)(..)/0: \4\3\2\1/' | xxd -r -g0 >>file
Exemple (décodé, donc c'est visible) :
printf "0: %.8x" 65534 | sed -E 's/0: (..)(..)(..)(..)/0: \4\3\2\1/' | xxd -r -g0 | xxd
0000000: feff 0000 ....
Ceci est pour non signé int, si l'int est signé et la valeur est négative il faut calculer le complément à deux. Mathématiques simples.
Vous pouvez utiliser la fonction suivante pour convertir une valeur numérique en son caractère correspondant :
chr() {
printf \\$(printf '%03o' $1)
}
Vous devez convertir les valeurs d'octets individuellement, les unes après les autres dans le bon ordre (endianess) pour la machine/architecture que vous utilisez. Donc je suppose qu'un peu d'utilisation d'un autre langage de script prenant en charge la sortie binaire ferait le mieux l'affaire.
Voyez si cela fonctionne pour vous
perl -e "print pack('L',`stat -c %s in.txt`)">>out.bin