概述
split命令是按大小/固定行数拆分大文件的轻量工具,核心特点是简单粗暴、高效通用,区别于csplit按内容/正则拆分的逻辑,split仅关注文件的物理尺寸或行数量,是处理超大文件(日志、备份、数据文件)的必备基础命令,适合快速拆分、便于传输/存储/处理。
资料合集:https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://pan.quark.cn/s/d0fb20abd19a
一、基本语法
split[选项]源文件[输出文件前缀]- 无
输出文件前缀时,默认生成xaa、xab、xac…命名的拆分文件; - 支持多源文件,但会按顺序拼接后统一拆分;
- 可通过管道读取标准输入(
命令 | split [选项] - [前缀],-代表标准输入)。
二、核心拆分方式(2种核心用法)
split的核心能力只有两个:按文件大小拆分、按固定行数拆分,搭配少量选项即可满足99%的使用场景,默认行为:按每1000行拆分,前缀x,后缀2个字母(aa/ab/ac)。
三、高频实用选项(按功能分类)
选项极简且易记,核心围绕拆分规则、后缀格式、行为控制设计,可自由组合:
| 选项 | 作用 | 实用场景 |
|---|---|---|
| 按行数拆分 | ||
-l N | --lines=N,按每N行拆分(默认1000行) | 拆分日志、文本文件,按行分割便于逐段查看 |
| 按大小拆分 | ||
-b SIZE | --bytes=SIZE,按指定大小拆分,支持单位:K(1024)、M(1024K)、G(1024M)、k(1000)、m(1000k) | 拆分超大备份文件、压缩包、二进制文件 |
-C SIZE | --line-bytes=SIZE,按最大SIZE字节拆分,不拆分整行(仅适用于文本) | 按大小拆分但保留文本行完整性,避免行截断 |
| 后缀格式(重点) | ||
-d | --numeric-suffixes,用数字后缀替代字母(00/01/02…),更易排序和批量处理 | 脚本批量处理拆分后的文件,数字后缀更友好 |
-a N | --suffix-length=N,指定后缀位数(默认2位),配合-d使用 | 拆分文件数量多(超100个)时,指定3/4位后缀 |
| 其他实用选项 | ||
-e | --elide-empty-files,忽略拆分后的空文件 | 源文件较小时,避免生成空的拆分文件 |
-u | --unbuffered,无缓冲输出,适合实时拆分管道流 | 实时拆分日志输出、命令执行的流式结果 |
四、经典实操示例(覆盖所有核心场景)
场景1:基础按行数拆分(默认/自定义)
# 默认:按1000行拆分,生成xaa、xab、xac...splitlarge_log.txt# 自定义:按500行拆分,指定前缀log_,数字后缀00/01split-l500-d large_log.txt log_# 生成:log_00、log_01、log_02...场景2:按大小拆分(最常用,二进制/文本通用)
# 按每200M拆分超大备份文件,数字后缀3位,前缀backup_split-b 200M -d -a3backup.tar.gz backup_# 生成:backup_000、backup_001、backup_002...(适合超1000个拆分文件)# 按每1G拆分,用1000进制单位(1G=1000M),字母后缀split-b 1g large_data.bin data_场景3:按大小拆分且保留文本行完整性(-C)
针对文本文件,避免-b将整行截断(比如一行长文本跨2个拆分文件),用-C:
# 按最大500K字节拆分,不拆分整行,数字后缀split-C 500K -d longline.txt txt_场景4:管道配合拆分(实时拆分命令输出)
将其他命令的输出直接拆分,无需生成临时文件,-代表标准输入:
# 查看超大日志并按200行拆分,前缀grep_log_grep"ERROR"/var/log/messages|split-l200-d - grep_log_# 实时拆分dd命令的磁盘备份流,按1G拆分ddif=/dev/sdaof=-bs=1M|split-b 1G -d -a3- sda_backup_场景5:拆分后批量合并(反向操作,必学)
split拆分的文件可通过cat按后缀顺序直接合并,还原为原文件,无任何损失:
# 合并数字后缀的拆分文件(log_00、log_01...)catlog_*>large_log_restore.txt# 合并字母后缀的拆分文件(xaa、xab...)catx*>backup_restore.tar.gz场景6:指定后缀位数(处理大量拆分文件)
若源文件超大,拆分后文件数超100个,默认2位后缀不够,用-a指定3/4位:
# 按500M拆分,数字后缀3位(000-999),前缀bigfile_split-b 500M -d -a3bigfile.dat bigfile_五、与csplit的核心区别(必分清,避免用错)
split和csplit都是文件拆分工具,但设计目标完全不同,无优劣之分,按需选择是关键,核心差异对比:
| 命令 | 拆分依据 | 后缀格式 | 支持文件类型 | 核心优势 | 适用场景 |
|---|---|---|---|---|---|
split | 物理尺寸(行数、字节数) | 字母/数字,可指定位数 | 所有文件(文本/二进制/压缩包) | 简单高效、通用,不依赖文件内容 | 超大文件拆分(备份/日志/压缩包)、按固定行/大小分割 |
csplit | 内容上下文(行号、正则、关键词) | 数字,可指定前缀/位数 | 仅文本文件 | 按内容精准拆分,支持复杂规则 | 日志按日期/关键词拆分、文本按段落/空行拆分 |
六、关键注意事项
- 合并无顺序问题:拆分后的文件按后缀字典序合并即可完全还原原文件,数字后缀(
-d)更易保证顺序; - 单位区分:
-b的K/M/G是1024进制(计算机存储),k/m/g是1000进制(物理存储),按需选择; - 二进制文件注意:拆分二进制文件(压缩包、可执行文件、镜像)只能用
-b,不能用-l/-C(按行拆分无意义); - 空文件处理:源文件行数/大小小于拆分规则时,仅生成1个拆分文件,加
-e可彻底避免空文件; - 覆盖问题:若当前目录已有同前缀后缀的文件,
split会直接覆盖,建议拆分前确认目录无重名文件。
七、拓展:拆分+压缩组合(实用技巧)
拆分超大文件前,若需压缩,可先压缩后拆分(更小的文件体积,便于传输),合并时先合并后解压:
# 第一步:压缩源文件gzip-c large_file.dat>large_file.dat.gz# 第二步:按100M拆分压缩包split-b 100M -d -a3large_file.dat.gz file_gz_# 传输后合并+解压(还原原文件)catfile_gz_*|gzip-d>large_file_restore.dat总结
split是通用型大文件拆分工具,核心价值是简单、高效、跨文件类型,日常使用的高频组合:
- 拆分文本/日志(按行):
split -l N -d 源文件 前缀 - 拆分二进制/压缩包(按大小):
split -b SIZE -d -a N 源文件 前缀 - 拆分文本且保留行完整(按大小):
split -C SIZE -d 源文件 前缀 - 管道实时拆分:
命令 | split -l/-b N -d - 前缀 - 拆分后还原:
cat 前缀* > 原文件名