You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dd命令拆分文件求助:将10627字节文件拆分为100字节小文件

问题分析及修复方案

你的脚本存在两个关键错误,还有一个可优化的细节:

1. dd的skip参数单位理解错误

当你设置bs=100时,skip的单位是块数(每块对应100字节),而非字节数。你脚本里的skip_byte每次累加100,导致第二次执行dd时,skip=100意味着跳过100个块(也就是10000字节),直接跳到文件第10001字节,中间的99块内容完全被跳过。

2. 输入文件名不匹配

你通过man sed > man_sed生成的文件名为man_sed,但脚本里dd的输入文件写的是sed_man,文件名错误会直接导致dd找不到文件而报错退出。

潜在问题:循环终止逻辑不够严谨

当读取到文件最后一块(不足100字节)时,dd会正常完成读取并返回0退出码,你的循环会继续执行下一次,直到skip超过文件总块数才会退出,这时候会多生成一个空文件。


修复后的脚本

skip_blocks=0
rec_count=1
input_file="man_sed"

while true; do
    dd if="$input_file" of="sed_man_part_${rec_count}.txt" bs=100 count=1 skip="$skip_blocks"
    # 检查输出文件是否为空,空文件则删除并终止循环
    if [ ! -s "sed_man_part_${rec_count}.txt" ]; then
        rm "sed_man_part_${rec_count}.txt"
        break
    fi
    skip_blocks=$(( skip_blocks + 1 ))
    rec_count=$(( rec_count + 1 ))
done

修复说明:

  • 将skip_byte改为skip_blocks,每次累加1,匹配dd的块单位逻辑,确保每次跳过的是上一次读取的100字节块。
  • 修正输入文件名,和你生成的man_sed保持一致。
  • 新增空文件检查逻辑:如果生成的文件无内容,直接删除并终止循环,避免生成多余的空文件。

内容的提问来源于stack exchange,提问作者Jitendra Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 19:52:10