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

如何不使用split工具按指定大小拆分大字节文件

如何不使用split工具按指定大小拆分大字节文件

我来给你分享两个不用split工具就能实现指定大小拆分文件的方法,亲测有效,完全能达到你想要的效果——每个分片120MiB(125829120字节),最后一个分片取剩余的字节数:

方法一:用Bash脚本配合dd命令实现

这个方法纯靠shell自带工具就能完成,适合Linux/Unix环境。核心思路是通过计算每个分片的起始偏移量,用dd命令精准读取对应字节范围写入新文件:

#!/bin/bash

# 配置参数
SOURCE_FILE="1GB.bin"
CHUNK_SIZE=$((120 * 1024 * 1024))  # 120MiB 转成字节数

# 获取源文件总字节数(Linux用下面这条,macOS换成 stat -f %z "$SOURCE_FILE")
TOTAL_SIZE=$(stat -c %s "$SOURCE_FILE")

# 计算完整分片数和剩余字节数
FULL_CHUNKS=$((TOTAL_SIZE / CHUNK_SIZE))
REMAINING=$((TOTAL_SIZE % CHUNK_SIZE))

# 生成完整的分片文件
for ((i=0; i<FULL_CHUNKS; i++)); do
    # 生成和split一致的文件名:xaa、xab、xac...
    FILE_NAME=$(printf "xa%c" $((97 + i)))
    # 计算当前分片的起始偏移量
    OFFSET=$((i * CHUNK_SIZE))
    # 用dd读取指定范围的字节写入新文件
    dd if="$SOURCE_FILE" of="$FILE_NAME" bs=1 skip="$OFFSET" count="$CHUNK_SIZE" status=none
done

# 处理最后一个剩余的分片
if [ $REMAINING -gt 0 ]; then
    LAST_FILE=$(printf "xa%c" $((97 + FULL_CHUNKS)))
    LAST_OFFSET=$((FULL_CHUNKS * CHUNK_SIZE))
    dd if="$SOURCE_FILE" of="$LAST_FILE" bs=1 skip="$LAST_OFFSET" count="$REMAINING" status=none
fi

关键点说明:

  • stat -c %s:用来获取文件的总字节数,macOS环境需要换成stat -f %z
  • dd的参数:bs=1表示按字节单位处理,skip跳过前面的偏移字节,count指定读取的字节数,status=none用来关闭dd的默认进度输出,让脚本更干净
  • 文件名生成:用printf "xa%c"配合ASCII码(97是小写a),生成和split完全一致的文件名格式

方法二:用Python脚本实现

这个方法跨平台,只要有Python环境(Windows/Linux/macOS都能用)就能运行,逻辑更直观:

source_file = "1GB.bin"
chunk_size = 120 * 1024 * 1024  # 120MiB 对应的字节数
chunk_index = 0

# 以二进制模式打开源文件
with open(source_file, "rb") as src_f:
    while True:
        # 每次读取指定大小的内容
        chunk_data = src_f.read(chunk_size)
        # 如果读取到空,说明文件已经读完
        if not chunk_data:
            break
        # 生成和split一致的文件名:xaa、xab...
        chunk_name = f"xa{chr(97 + chunk_index)}"
        # 将读取到的内容写入分片文件
        with open(chunk_name, "wb") as chunk_f:
            chunk_f.write(chunk_data)
        chunk_index += 1

关键点说明:

  • 二进制模式:用rb和wb模式打开文件,避免文本模式的编码问题,确保字节级别的精准读取
  • 循环读取:每次读取chunk_size字节,直到返回空字节串,自动处理最后一个分片的剩余内容
  • 文件名生成:用chr(97 + chunk_index)生成小写字母后缀,和split的命名规则完全匹配

验证结果

运行完上面任意一个脚本后,你可以用du -b *xa*命令检查分片文件的大小,结果会和使用split工具得到的完全一致:

125829120       xaa
125829120       xab
125829120       xac
125829120       xad
125829120       xae
125829120       xaf
125829120       xag
125829120       xah
41943040        xai

备注:内容来源于stack exchange,提问作者GERATISAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 16:04:30