如何使用 dd 实用程序跳过输出文件中所需的字节数?

如何使用 dd 实用程序跳过输出文件中所需的字节数?

我想使用 dd 实用程序用输入文件重写输出文件中的特定区域,我需要跳过输出文件中的前 732618 个字节并从那里开始写入 708800 个字节,我只找到了如何跳过输入文件中的字节,但无法在输出文件中找到如何跳过它的信息,是否可以使用 dd 来完成?

答案1

手册页说:

seek=NN obs在输出开始时跳过大小的块

您可能conv=notrunc也希望不要截断输出。

$ echo abcdefghijkl > foo.txt
$ echo -n XYZ | dd bs=1 seek=3 of=foo.txt conv=notrunc
3+0 records in [...]
$ cat foo.txt
abcXYZghijkl

请注意,如果您bs=1按上述方式使用,它将针对write()每个字节的读写发出一次系统调用,因此速度会很慢。不过,我不会尝试设置obs为完整的 732618,因为它(据我所知)dd不会重试部分写入。

使用 GNU dd,您可以添加oflag=seek_bytes然后将查找偏移量指定为字节,从而允许更合理的块大小。


或者,使用 Perl 进行查找:

$ echo abcdefghijkl > foo.txt
$ echo -n XYZ | ( perl -e 'sysseek STDOUT, 3, 0;'; cat ) 1<> foo.txt
$ cat foo.txt 
abcXYZghijkl

相关内容