これdd
はread()
、write()
およびlseek()
システムコールへの生のインターフェイスであることに注意してください。あなただけの通常のファイル、ブロックデバイスと(のようないくつかのキャラクタデバイスからデータのチャンクを抽出するために、確実にそれを使用することができ/dev/urandom
たため、ファイルである、)read(buf, size)
返すことが保証されてsize
いる限り、ファイルの終わりに達していないとして。
パイプ、ソケット、およびほとんどのキャラクターデバイス(ttyなど)の場合read()
、サイズ1のs を実行するかGNU dd
拡張機能を使用しない限り、そのような保証はありませんiflag=fullblock
。
どちらか:
{
gdd < file1 bs=1M iflag=fullblock count=99 skip=1
gdd < file2 bs=1M iflag=fullblock count=10
} > final_output
または:
M=1048576
{
dd < file1 bs=1 count="$((99*M))" skip="$M"
dd < file2 bs=1 count="$((10*M))"
} > final_output
または、次のようなシーク演算子の組み込みサポートを備えたシェルを使用しksh93
ます。
M=1048576
{
command /opt/ast/bin/head -c "$((99*M))" < file1 <#((M))
command /opt/ast/bin/head -c "$((10*M))" < file2
}
またはzsh
(ここでオプションをhead
サポートしていると仮定-c
):
zmodload zsh/system &&
{
sysseek 1048576 && head -c 99M &&
head -c 10M < file2
} < file1 > final_output
oflag=append conv=notrunc
)クローズ/再オープンされないため、遅延割り当て(XFSなど)を行うファイルシステムは、まだ処理が残っているときにファイルの書き込みが完了したと判断する可能性が最も低くなります。