!['dd' 的替代方案,不会截断文件](https://linux22.com/image/117566/'dd'%20%E7%9A%84%E6%9B%BF%E4%BB%A3%E6%96%B9%E6%A1%88%EF%BC%8C%E4%B8%8D%E4%BC%9A%E6%88%AA%E6%96%AD%E6%96%87%E4%BB%B6.png)
有谁知道 'dd' 的替代方案,它不会截断文件,而不使用:conv=notrunc
。conv=notrunc
由于空间有限,不支持通过 busybox/toybox添加。
例如,我想要相当于
dd bs=4 count=3 skip=2 seek=3 if=file.in of=file.out conv=notrunc
但这在dd
不支持的地方会起作用conv=notrunc
。
答案1
使用标准<>
sh
重定向运算符以读+写模式打开文件没有截断。
cat < file.in 1<> file.out
复制file.in
开头的内容file.out
。
如果您需要在输入或输出文件中查找,并假设您dd
仍然支持这些指令:
dd bs=4 count=3 skip=2 seek=3 < file.in 1<> file.out
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