从块设备 * 不* 截断文件覆盖文件的中间?

mar*_*usw 2 linux terminal file-management command-line

我有一个 Linux (Kubuntu) 系统,里面有一个大 (~20Gb) 的文件,我想弄乱它。具体来说,我想将另一个大文件(~12Gb)的全部内容复制到该文件的中间,并保留文件中未被覆盖的部分。

这就是我想要发生的事情,管道之间的文本代表文件内容:

前:

outfile: |abcdefghijklmnopqrstuvwxyz|
infile:  |123456789|
Run Code Online (Sandbox Code Playgroud)

后:

outfile: |abcdef123456789pqrstuvwxyz|
(infile is here ^^^^^^^^^)
Run Code Online (Sandbox Code Playgroud)

我试过这个:

dd if=infile of=outfile seek=162
Run Code Online (Sandbox Code Playgroud)

(162 是我想在 outfile 中偏移的扇区数)

但事情是这样的:

outfile: |abcdef123456789|
(missing part of outfile ^)
Run Code Online (Sandbox Code Playgroud)

做这个的最好方式是什么?

Kei*_*thB 5

您需要将 conv=notrunc 指定为 dd。从联机帮助页

除非指定了 notrunc 转换值,否则任何常规输出文件都会被截断。如果查找到输出文件的初始部分(参见 oseek 操作数),则输出文件在该点被截断。