不截断文件的“dd”的替代方法

use*_*979 4 io-redirection dd files

有谁知道'dd'的替代方法,它不会截断文件,而不使用:conv=notruncconv=notrunc由于空间有限,不支持通过 busybox/toybox添加。

例如,我想要相当于

dd bs=4 count=3 skip=2 seek=3 if=file.in of=file.out conv=notrunc
Run Code Online (Sandbox Code Playgroud)

但这在dd不支持conv=notrunc.

Sté*_*las 11

使用标准<> sh重定向操作符,它以读+写模式打开文件而不会被截断

cat < file.in 1<> file.out
Run Code Online (Sandbox Code Playgroud)

复制file.in开头的内容file.out

如果您需要在输入或输出文件中查找,并假设您dd仍然支持这些指令:

dd bs=4 count=3 skip=2 seek=3 < file.in 1<> file.out
Run Code Online (Sandbox Code Playgroud)

如果您根本没有dd,您可以尝试head -c,假设您的版本负责在退出时将文件中的指针留在正确的位置(IIRC 旧版本的busybox 没有这样做)。

例如,上面的等价物将是:

{
  head -c 8 > /dev/null        # seek input fd to offset 8
  head -c 12 <&1 > /dev/null   # seek output fd to offset 12
  head -c 12                   # copy 12 bytes
} < file.in 1<> file.out
Run Code Online (Sandbox Code Playgroud)