如何将文件写入另一个

use*_*443 8 dd files

我有一个大小为 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,用输入文件中的数据覆盖它在那里找到的数据,然后关闭输出而不先截断它。


Sté*_*las 5

只需使用<>shell 重定向操作符以读写模式打开目标文件,而不是只写并截断>

假设你想file2在上面写file1

cat file2 1<> file1
Run Code Online (Sandbox Code Playgroud)

这将写入file2file1的偏移量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解决方案更方便。