Ingatlah bahwa itu dd
adalah antarmuka mentah ke read()
, write()
dan lseek()
system call. Anda hanya dapat menggunakannya dengan andal untuk mengekstrak potongan data dari file biasa, perangkat blok dan beberapa perangkat karakter (seperti /dev/urandom
), yaitu file yang read(buf, size)
dijamin akan kembali size
selama akhir file tidak tercapai.
Untuk pipa, soket, dan sebagian besar perangkat karakter (seperti ttys), Anda tidak memiliki jaminan seperti itu kecuali Anda melakukan read()
ukuran 1, atau menggunakan dd
ekstensi GNU iflag=fullblock
.
Jadi:
{
gdd < file1 bs=1M iflag=fullblock count=99 skip=1
gdd < file2 bs=1M iflag=fullblock count=10
} > final_output
Atau:
M=1048576
{
dd < file1 bs=1 count="$((99*M))" skip="$M"
dd < file2 bs=1 count="$((10*M))"
} > final_output
Atau dengan cangkang dengan dukungan bawaan untuk operator pencari seperti ksh93
:
M=1048576
{
command /opt/ast/bin/head -c "$((99*M))" < file1 <#((M))
command /opt/ast/bin/head -c "$((10*M))" < file2
}
Atau zsh
(dengan asumsi Anda head
mendukung -c
opsi di sini):
zmodload zsh/system &&
{
sysseek 1048576 && head -c 99M &&
head -c 10M < file2
} < file1 > final_output
oflag=append conv=notrunc
), sehingga filesystem yang melakukan alokasi tertunda (seperti XFS) paling mungkin untuk memutuskan file selesai ditulis ketika masih ada lagi yang harus dilakukan.