web-dev-qa-db-ja.com

ファイルを切り捨てない「dd」の代替

conv=notruncを使用せずにファイルを切り捨てない、「dd」の代替案を知っている人はいますか。スペースに限りがあるため、busybox/toyboxを介したconv=notruncの追加はサポートされていません。

たとえば、私は同等のものが欲しいです

dd bs=4 count=3 skip=2 seek=3 if=file.in of=file.out conv=notrunc

しかし、それはddconv=notruncをサポートしていない場合に機能します。

3
user3698979

標準の<>shリダイレクト演算子を使用して、ファイルを読み取り+書き込みモードで開きます切り捨てなし

cat < file.in 1<> file.out

file.inの先頭にfile.outの内容をコピーします。

入力ファイルまたは出力ファイルを検索する必要があり、ddが引き続きこれらのディレクティブをサポートしていると仮定した場合:

dd bs=4 count=3 skip=2 seek=3 < file.in 1<> file.out

ddがまったくない場合は、head -cを試すことができます。ただし、終了時にファイル内の適切な場所にポインタを残すようにバージョンが処理していると仮定します(IIRCの古いバージョンのbusyboxはやっていません)。

たとえば、上記と同等のものは次のようになります。

{
  head -c 8 > /dev/null        # seek input fd to offset 8
  head -c 12 <&1 > /dev/null   # seek output fd to offset 12
  head -c 12                   # copy 12 bytes
} < file.in 1<> file.out
10