我有一个大小为 9.0KB 的空文件(其中只有零),我需要向其中写入另一个文件(大小为 1.1KB),但第一个文件不得丢失其大小或其其余内容。因此,如果整个文件00000000000000...
现在是,我需要在其中写入第二个文件并保留零不变。我尝试过使用dd
- 文件大小调整,但没有成功。
dd if=out/one.img of=out/go.img
有人知道我该怎么做吗?
答案1
要覆盖目标文件的开头而不截断它,请给出notrunc
转换指令:
$ dd if=out/one.img of=out/go.img conv=notrunc
如果您想要源文件的数据附加的到目的地,您可以使用指令来做到这一点seek
:
$ dd if=out/one.img of=out/go.img bs=1k seek=9
这表明dd
块大小为 1 kiB,因此seek
在写入之前前进 9 kiB。
您也可以将这两种形式结合起来。例如,要覆盖第二文件中的 1 kiB 块具有 1 kiB 源:
$ dd if=out/one.img of=out/go.img bs=1k seek=9 conv=notrunc
也就是说,它会跳过输出文件的前 1 kiB,用输入文件中的数据覆盖在那里找到的数据,然后关闭输出而不先截断它。
答案2
只需使用 shell 重定向运算符以读写模式打开目标文件,<>
而不是使用截断来打开只写模式>
:
假设你想file2
在上面写file1
:
cat file2 1<> file1
这将写入file2
偏移file1
量 0(在开头)。
如果要file2
在 的末尾追加file1
,请使用>>
运算符。
cat file2 >> file1
您还可以file2
在任意偏移处写入file1
:
{ head -c1000 # for 1000 bytes within or
# head -n 10 # for 10 lines within
cat file2 >&0
} <> file1 > /dev/null
尽管对于字节偏移,您可能会发现使用 Warren 的dd
解决方案更方便。