To je to, co jsem mohl vymyslet:
int=65534
printf "0: %.8x" $int | xxd -r -g0 >>file
Nyní v závislosti na endianness možná budete chtít prohodit pořadí bajtů:
printf "0: %.8x" $int | sed -E 's/0: (..)(..)(..)(..)/0: \4\3\2\1/' | xxd -r -g0 >>file
Příklad (dekódovaný, takže je vidět):
printf "0: %.8x" 65534 | sed -E 's/0: (..)(..)(..)(..)/0: \4\3\2\1/' | xxd -r -g0 | xxd
0000000: feff 0000 ....
Toto je pro nepodepsané int, pokud je int podepsán a hodnota je záporná musíte vypočítat komplement těchto dvou. Jednoduchá matematika.
K převodu číselné HODNOTY na odpovídající znak můžete použít následující funkci:
chr() {
printf \\$(printf '%03o' $1)
}
Hodnoty bajtů musíte převádět jednotlivě, po sobě ve správném pořadí (endianess) pro stroj/architekturu, kterou používáte. Takže si myslím, že nejlépe by fungovalo trochu použití jiného skriptovacího jazyka, který podporuje binární výstup.
Podívejte se, zda vám to funguje
perl -e "print pack('L',`stat -c %s in.txt`)">>out.bin
Jak zkontrolovat, zda je soubor prázdný v Bash?
Pomocí možností Rsync zahrnout a vyloučit zahrnout adresář a soubor podle vzoru