Linux命令-split(文件分割 —— 将大文件拆分为多个小文件)
2026/8/5 8:34:19 网站建设 项目流程

Linux命令-split(文件分割 —— 将大文件拆分为多个小文件)

    • 🔰 简介
      • 安装位置
    • 📖 语法
    • ⚙️ 选项
      • 分割方式(三选一)
      • 输出格式选项
      • 特殊选项
    • 💡 示例
      • 示例 1:按行数分割日志文件
      • 示例 2:按大小分割二进制文件
      • 示例 3:按块数均匀分割
      • 示例 4:自定义后缀和数字命名
      • 示例 5:标准输入分割
      • 示例 6:大文件传输场景
      • 示例 7:split vs csplit 对比
    • ⚠️ 注意
      • 常见陷阱与最佳实践
      • 各发行版差异
    • 📝 总结
    • 📚 相关命令

快速参考split用于将一个大文件切割成若干个小文件,支持按行数字节大小指定块数三种分割方式。生成的文件默认以xaaxabxac…命名,可通过选项自定义前缀和后缀格式。split常与cat配合使用(用cat合并还原),是大文件传输、日志归档、CD/DVD 刻录等场景的基础工具。


🔰 简介

split是 GNU coreutils 的一部分,几乎所有 Linux 发行版都预装。它的设计哲学简单而强大:给定一个大文件,按指定规则切割成更小的文件块。配合管道和其他命令,可以灵活地处理各种分割需求。

安装位置

# split 命令路径whichsplit# 输出:/usr/bin/split# 查看版本split--version|head-1# 输出:split (GNU coreutils) 8.30# 查看所属软件包rpm-qf/usr/bin/split# 输出:coreutils-8.30-15.el7.x86_64dpkg-S/usr/bin/split# 输出:coreutils: /usr/bin/split

📖 语法

split [选项] [输入文件 [前缀]]
参数说明
输入文件要分割的文件(省略则从标准输入读取)
前缀输出文件的前缀(默认x

⚙️ 选项

分割方式(三选一)

选项说明
-l 行数按行数分割(默认 1000 行/文件)
-b 大小按字节数分割(支持 K/M/G/T 后缀)
-n 块数按指定块数均匀分割
-C 大小按行分割,但每文件大小不超过指定值

输出格式选项

选项说明
-d使用数字后缀(默认字母:aa, ab, ac…)
-a 长度后缀长度(默认 2,如需要更多文件可加大)
--additional-suffix 后缀为每个输出文件添加额外后缀(如.txt
--verbose显示每个输出文件的创建信息

特殊选项

选项说明
--filter 命令将每个分块通过管道传给命令处理
-t 分隔符指定行分隔符(默认换行符)
-u, --unbuffered立即刷新输出(与 --filter 配合使用)

💡 示例

示例 1:按行数分割日志文件

# 创建测试用的大日志文件seq15000>/tmp/large_file.txtwc-l/tmp/large_file.txt# 输出:5000 /tmp/large_file.txt# 按每1000行分割split-l1000/tmp/large_file.txt /tmp/part_# 默认后缀为字母:aa, ab, ac...# 查看生成的文件ls-la/tmp/part_*# 输出:# -rw-r--r-- 1 user group 4893 Jun 14 14:30 /tmp/part_aa# -rw-r--r-- 1 user group 4893 Jun 14 14:30 /tmp/part_ab# -rw-r--r-- 1 user group 4893 Jun 14 14:30 /tmp/part_ac# -rw-r--r-- 1 user group 4893 Jun 14 14:30 /tmp/part_ad# -rw-r--r-- 1 user group 3893 Jun 14 14:30 /tmp/part_ae# 验证每个文件的行数wc-l/tmp/part_a*# 输出:# 1000 /tmp/part_aa# 1000 /tmp/part_ab# 1000 /tmp/part_ac# 1000 /tmp/part_ad# 1000 /tmp/part_ae# 使用 cat 合并还原cat/tmp/part_a*>/tmp/restored.txtdiff/tmp/large_file.txt /tmp/restored.txt# 输出:(空) = 文件完全一致

示例 2:按大小分割二进制文件

# 创建 500MB 的测试文件ddif=/dev/urandomof=/tmp/bigfile.datbs=1Mcount=5002>/dev/nullls-lh/tmp/bigfile.dat# 输出:-rw-r--r-- 1 user group 500M Jun 14 14:30 /tmp/bigfile.dat# 按每100MB分割(使用数字后缀)split-b100M-d/tmp/bigfile.dat /tmp/chunk_ls-lh/tmp/chunk_*# 输出:# -rw-r--r-- 1 user group 100M Jun 14 14:30 /tmp/chunk_00# -rw-r--r-- 1 user group 100M Jun 14 14:30 /tmp/chunk_01# -rw-r--r-- 1 user group 100M Jun 14 14:30 /tmp/chunk_02# -rw-r--r-- 1 user group 100M Jun 14 14:30 /tmp/chunk_03# -rw-r--r-- 1 user group 100M Jun 14 14:30 /tmp/chunk_04# 验证文件大小总和du-sh/tmp/bigfile.dat /tmp/chunk_*# 输出:# 500M /tmp/bigfile.dat# 100M /tmp/chunk_00# 100M /tmp/chunk_01# 100M /tmp/chunk_02# 100M /tmp/chunk_03# 100M /tmp/chunk_04# 合并还原cat/tmp/chunk_0*>/tmp/restored.dat md5sum /tmp/bigfile.dat /tmp/restored.dat# 输出:# a1b2c3d4e5f6... /tmp/bigfile.dat# a1b2c3d4e5f6... /tmp/restored.dat# ✅ 校验和完全一致# 大小单位说明split-b1Kfile# 1 KB (1024 bytes)split-b1Mfile# 1 MBsplit-b1Gfile# 1 GBsplit-b1Tfile# 1 TBsplit-b1024file# 1024 bytessplit-b1KBfile# 1000 bytes(SI 单位)

示例 3:按块数均匀分割

# 准备测试文件seq1100>/tmp/numbers.txtwc-l/tmp/numbers.txt# 输出:100 /tmp/numbers.txt# 均匀分割为 4 个文件split-n4-d/tmp/numbers.txt /tmp/equal_ls/tmp/equal_*# 输出:# /tmp/equal_00# /tmp/equal_01# /tmp/equal_02# /tmp/equal_03# 查看每个文件的行数wc-l/tmp/equal_*# 输出:# 25 /tmp/equal_00# 25 /tmp/equal_01# 25 /tmp/equal_02# 25 /tmp/equal_03# 100 total# 不均匀分割(103 不能被 4 整除)seq1103>/tmp/numbers103.txtsplit-n4-d/tmp/numbers103.txt /tmp/unequal_wc-l/tmp/unequal_*# 输出:# 26 /tmp/unequal_00# 26 /tmp/unequal_01# 26 /tmp/unequal_02# 25 /tmp/unequal_03# 103 total# split 自动分配:前3个文件各多1行

示例 4:自定义后缀和数字命名

# 使用数字后缀(-d)split-l500-d/tmp/large_file.txt /tmp/segment_ls/tmp/segment_*# 输出:# /tmp/segment_00 /tmp/segment_01 /tmp/segment_02 ...# 自定义后缀长度(-a 3:三位数字 000-999)split-l500-d-a3/tmp/large_file.txt /tmp/big_seg_ls/tmp/big_seg_*# 输出:# /tmp/big_seg_000 /tmp/big_seg_001 /tmp/big_seg_002 ...# 添加额外后缀(如 .txt)split-l500-d--additional-suffix=.txt /tmp/large_file.txt /tmp/data_ls/tmp/data_*# 输出:# /tmp/data_00.txt /tmp/data_01.txt /tmp/data_02.txt ...# 同时使用多项split-l500-d-a3--additional-suffix=.log /var/log/app.log /tmp/app_part_ls/tmp/app_part_*# 输出:# /tmp/app_part_000.log /tmp/app_part_001.log /tmp/app_part_002.log

示例 5:标准输入分割

# 从管道的标准输入分割tail-n10000/var/log/messages|split-l1000-d- /tmp/syslog_# 输出:/tmp/syslog_00 到 /tmp/syslog_09# 从其他命令输出分割psaux|split-l50-d- /tmp/ps_snapshot_# 每个文件 50 行进程信息# 分割并同时压缩每个片段cat/var/log/syslog|split-l5000--filter='gzip > $FILE.gz'- /tmp/syslog_part_ls/tmp/syslog_part_*# 输出:# /tmp/syslog_part_aa.gz /tmp/syslog_part_ab.gz /tmp/syslog_part_ac.gz# 使用 --filter 的强大功能:分割并直接处理cat/var/log/app.log|\split-l1000--filter='awk "{print NR, \$0}" > $FILE'- /tmp/line_numbered_# 每个分块都添加了行号

示例 6:大文件传输场景

# 场景:通过邮件附件发送 500MB 文件(单附件限制 25MB)split-b25M-dbigfile.tar.gz bigfile.part_ls-lhbigfile.part_*# 输出:# -rw-r--r-- 1 user group 25M Jun 14 14:30 bigfile.part_00# -rw-r--r-- 1 user group 25M Jun 14 14:30 bigfile.part_01# ...# -rw-r--r-- 1 user group 25M Jun 14 14:30 bigfile.part_19# 接收方合并还原catbigfile.part_*>bigfile.tar.gz md5sum bigfile.tar.gz# 验证完整性# 场景:通过 U 盘传输超过 FAT32 4GB 限制的文件split-b4G-dlarge_video.mp4 large_video.part_# FAT32 最大文件 4GB# 生成校验和文件方便验证md5sum large_video.mp4>checksum.md5 md5sum large_video.part_*>parts_checksum.md5# 接收方验证并合并md5sum-cparts_checksum.md5&&\catlarge_video.part_*>large_video.mp4&&\md5sum-cchecksum.md5# 输出:# parts_checksum.md5: OK# checksum.md5: OK

示例 7:split vs csplit 对比

# === csplit:按内容模式分割 ===# 适用场景:按分隔符/正则表达式分割文件cat>/tmp/config_file.conf<<'EOF' # [Global] setting1 = value1 setting2 = value2 # [Database] host = localhost port = 3306 # [Logging] level = debug file = /var/log/app.log EOF# 按 "# [" 开头的行分割csplit-z/tmp/config_file.conf'/^# \[/''{*}'# 输出:# 15 (节1: Global)# 31 (节2: Database)# 32 (节3: Logging)lsxx*# 输出:xx00 xx01 xx02# === split:按大小/行数分割 ===# 适用场景:按行数、字节数、块数分割# 对比表:# ┌──────────────┬────────────────────┬─────────────────────┐# │ 工具 │ 分割依据 │ 典型场景 │# ├──────────────┼────────────────────┼─────────────────────┤# │ split │ 行数/字节数/块数 │ 大文件分片 │# │ csplit │ 正则表达式模式 │ 按内容结构拆分 │# └──────────────┴────────────────────┴─────────────────────┘

⚠️ 注意

常见陷阱与最佳实践

# 陷阱1:后缀不够长导致文件名冲突# 假设要分割出 800 个文件,默认 -a 2(aa-zz 仅 676 个)split-l100huge.txt part_# 默认 -a 2# 错误:当生成到 part_zz 后无法继续# 解决:加大后缀长度split-l100-a4huge.txt part_# 可生成 aaaa-zzzz(456,976 个文件)# 陷阱2:按行分割时最后一行可能不完整# 如果文件不以换行符结尾,最后一行可能被遗漏echo-n"no newline">/tmp/no_newline.txtsplit-l1/tmp/no_newline.txt# 结果可能不符合预期# 陷阱3:CSV 文件按行分割可能破坏数据结构# 不建议对结构化文件直接用 split# 应使用 head/tail 保持行完整性# 陷阱4:二进制文件不要按行分割split-l1000binary_file.dat# ❌ 错误!split-b100M binary_file.dat# ✅ 正确# 最佳实践:分割后立即验证md5sum original.tar.gz>original.md5split-b500M-doriginal.tar.gz original.part_catoriginal.part_*>reconstructed.tar.gz md5sum-coriginal.md5# 输出:original.tar.gz: OK

各发行版差异

# GNU coreutils split(大多数发行版)split--version|head-1# CentOS/RHEL/Debian/Ubuntu/Fedora: split (GNU coreutils) 8.x# -n 选项(按块数分割):# GNU split 支持 -n,但 BSD split 不支持# 在 macOS 上不可用(BSD split)# GNU split 额外选项:# --filter: 管道处理每个分块# --verbose: 显示创建信息# -C: 按行分割但限制大小# 单位后缀(GNU split 独有):# K, M, G, T, P, E, Z, Y (1024 进制)# KB, MB, GB... (1000 进制)

📝 总结

split是 Linux 文件处理工具箱中不可或缺的一员:

  • 三种分割方式-l按行数(文本文件)、-b按字节(所有文件)、-n按块数(均匀分割)
  • 输出命名-d数字后缀、-a后缀长度、--additional-suffix额外后缀
  • 与 cat 配合cat 分片* > 原文件即可无损合并还原
  • –filter 高级用法:每个分块可即时通过管道传给其他命令处理
  • vs csplitsplit按大小/行数/块数分割;csplit按内容模式(正则)分割
  • 最佳实践:分割后立即生成校验和(md5sum),确保数据完整性

📚 相关命令

命令说明
cat配合使用合并 split 的分片文件
csplit按正则表达式模式分割文件
head输出文件前 N 行(提取头部)
tail输出文件最后 N 行(提取尾部)
wc统计行数、单词数、字节数
md5sum生成/验证文件校验和
dd按块读写文件(可指定块大小)
gzip压缩工具(配合分割减少存储)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询