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

发布时间:2026/8/5 8:34:32
Linux命令-split(文件分割 —— 将大文件拆分为多个小文件) Linux命令-split文件分割 —— 将大文件拆分为多个小文件 简介安装位置 语法⚙️ 选项分割方式三选一输出格式选项特殊选项 示例示例 1按行数分割日志文件示例 2按大小分割二进制文件示例 3按块数均匀分割示例 4自定义后缀和数字命名示例 5标准输入分割示例 6大文件传输场景示例 7split vs csplit 对比⚠️ 注意常见陷阱与最佳实践各发行版差异 总结 相关命令快速参考split用于将一个大文件切割成若干个小文件支持按行数、字节大小、指定块数三种分割方式。生成的文件默认以xaa、xab、xac…命名可通过选项自定义前缀和后缀格式。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.datbs1Mcount5002/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 bytesSI 单位示例 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自定义后缀和数字命名# 使用数字后缀-dsplit-l500-d/tmp/large_file.txt /tmp/segment_ls/tmp/segment_*# 输出# /tmp/segment_00 /tmp/segment_01 /tmp/segment_02 ...# 自定义后缀长度-a 3三位数字 000-999split-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 ...# 添加额外后缀如 .txtsplit-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--filtergzip $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--filterawk {print NR, \$0} $FILE- /tmp/line_numbered_# 每个分块都添加了行号示例 6大文件传输场景# 场景通过邮件附件发送 500MB 文件单附件限制 25MBsplit-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.mp4checksum.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示例 7split vs csplit 对比# csplit按内容模式分割 # 适用场景按分隔符/正则表达式分割文件cat/tmp/config_file.confEOF # [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 2aa-zz 仅 676 个split-l100huge.txt part_# 默认 -a 2# 错误当生成到 part_zz 后无法继续# 解决加大后缀长度split-l100-a4huge.txt part_# 可生成 aaaa-zzzz456,976 个文件# 陷阱2按行分割时最后一行可能不完整# 如果文件不以换行符结尾最后一行可能被遗漏echo-nno newline/tmp/no_newline.txtsplit-l1/tmp/no_newline.txt# 结果可能不符合预期# 陷阱3CSV 文件按行分割可能破坏数据结构# 不建议对结构化文件直接用 split# 应使用 head/tail 保持行完整性# 陷阱4二进制文件不要按行分割split-l1000binary_file.dat# ❌ 错误split-b100M binary_file.dat# ✅ 正确# 最佳实践分割后立即验证md5sum original.tar.gzoriginal.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压缩工具配合分割减少存储