我有一个大小为 9,0KB 的空文件(其中只有零),我需要向其中写入另一个文件(大小为 1,1KB),但第一个文件不得丢失其大小或其余内容。因此,如果整个文件是00000000000000...
现在,我需要在其中写入第二个文件并保留零。我曾尝试使用dd
,但没有成功 - 文件大小调整。
dd if=out/one.img of=out/go.img
Run Code Online (Sandbox Code Playgroud)
有谁知道我该怎么做?
War*_*ung 13
要覆盖目标文件的开头而不截断它,请给出notrunc
转换指令:
$ dd if=out/one.img of=out/go.img conv=notrunc
Run Code Online (Sandbox Code Playgroud)
如果您想将源文件的数据附加到目标,您可以使用以下seek
指令:
$ dd if=out/one.img of=out/go.img bs=1k seek=9
Run Code Online (Sandbox Code Playgroud)
这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
Run Code Online (Sandbox Code Playgroud)
也就是说,它跳过输出文件的前 1 kiB,用输入文件中的数据覆盖它在那里找到的数据,然后关闭输出而不先截断它。
只需使用<>
shell 重定向操作符以读写模式打开目标文件,而不是只写并截断>
:
假设你想file2
在上面写file1
:
cat file2 1<> file1
Run Code Online (Sandbox Code Playgroud)
这将写入file2
到file1
的偏移量0(开头)。
如果要追加file2
在年底file1
,使用>>
运营商。
cat file2 >> file1
Run Code Online (Sandbox Code Playgroud)
您还可以使用file2
以下任何偏移量写入file1
:
{ head -c1000 # for 1000 bytes within or
# head -n 10 # for 10 lines within
cat file2 >&0
} <> file1 > /dev/null
Run Code Online (Sandbox Code Playgroud)
尽管对于字节偏移量,您可能会发现使用 Warren 的dd
解决方案更方便。