Linux 命令:split

概述

split 命令是按大小/固定行数拆分大文件 的轻量工具,核心特点是简单粗暴、高效通用 ,区别于 csplit 按内容/正则拆分的逻辑,split 仅关注文件的物理尺寸行数量,是处理超大文件(日志、备份、数据文件)的必备基础命令,适合快速拆分、便于传输/存储/处理。

资料合集:https://pan.quark.cn/s/6fe3007c3e95https://pan.quark.cn/s/561de99256a5https://pan.quark.cn/s/985f55b13d94https://pan.quark.cn/s/d0fb20abd19a

一、基本语法

bash 复制代码
split [选项] 源文件 [输出文件前缀]
  • 输出文件前缀时,默认生成xaaxabxac...命名的拆分文件;
  • 支持多源文件,但会按顺序拼接后统一拆分;
  • 可通过管道读取标准输入(命令 | 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:基础按行数拆分(默认/自定义)
bash 复制代码
# 默认:按1000行拆分,生成xaa、xab、xac...
split large_log.txt

# 自定义:按500行拆分,指定前缀log_,数字后缀00/01
split -l 500 -d large_log.txt log_
# 生成:log_00、log_01、log_02...
场景2:按大小拆分(最常用,二进制/文本通用)
bash 复制代码
# 按每200M拆分超大备份文件,数字后缀3位,前缀backup_
split -b 200M -d -a 3 backup.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

bash 复制代码
# 按最大500K字节拆分,不拆分整行,数字后缀
split -C 500K -d longline.txt txt_
场景4:管道配合拆分(实时拆分命令输出)

将其他命令的输出直接拆分,无需生成临时文件,-代表标准输入:

bash 复制代码
# 查看超大日志并按200行拆分,前缀grep_log_
grep "ERROR" /var/log/messages | split -l 200 -d - grep_log_

# 实时拆分dd命令的磁盘备份流,按1G拆分
dd if=/dev/sda of=- bs=1M | split -b 1G -d -a 3 - sda_backup_
场景5:拆分后批量合并(反向操作,必学)

split 拆分的文件可通过cat按后缀顺序直接合并,还原为原文件,无任何损失:

bash 复制代码
# 合并数字后缀的拆分文件(log_00、log_01...)
cat log_* > large_log_restore.txt

# 合并字母后缀的拆分文件(xaa、xab...)
cat x* > backup_restore.tar.gz
场景6:指定后缀位数(处理大量拆分文件)

若源文件超大,拆分后文件数超100个,默认2位后缀不够,用-a指定3/4位:

bash 复制代码
# 按500M拆分,数字后缀3位(000-999),前缀bigfile_
split -b 500M -d -a 3 bigfile.dat bigfile_

五、与csplit的核心区别(必分清,避免用错)

splitcsplit 都是文件拆分工具,但设计目标完全不同,无优劣之分,按需选择是关键,核心差异对比:

命令 拆分依据 后缀格式 支持文件类型 核心优势 适用场景
split 物理尺寸(行数、字节数) 字母/数字,可指定位数 所有文件(文本/二进制/压缩包) 简单高效、通用,不依赖文件内容 超大文件拆分(备份/日志/压缩包)、按固定行/大小分割
csplit 内容上下文(行号、正则、关键词) 数字,可指定前缀/位数 仅文本文件 按内容精准拆分,支持复杂规则 日志按日期/关键词拆分、文本按段落/空行拆分

六、关键注意事项

  1. 合并无顺序问题 :拆分后的文件按后缀字典序 合并即可完全还原原文件,数字后缀(-d)更易保证顺序;
  2. 单位区分-bK/M/G1024进制 (计算机存储),k/m/g1000进制(物理存储),按需选择;
  3. 二进制文件注意 :拆分二进制文件(压缩包、可执行文件、镜像)只能用-b ,不能用-l/-C(按行拆分无意义);
  4. 空文件处理 :源文件行数/大小小于拆分规则时,仅生成1个拆分文件,加-e可彻底避免空文件;
  5. 覆盖问题 :若当前目录已有同前缀后缀的文件,split直接覆盖,建议拆分前确认目录无重名文件。

七、拓展:拆分+压缩组合(实用技巧)

拆分超大文件前,若需压缩,可先压缩后拆分 (更小的文件体积,便于传输),合并时先合并后解压

bash 复制代码
# 第一步:压缩源文件
gzip -c large_file.dat > large_file.dat.gz

# 第二步:按100M拆分压缩包
split -b 100M -d -a 3 large_file.dat.gz file_gz_

# 传输后合并+解压(还原原文件)
cat file_gz_* | gzip -d > large_file_restore.dat

总结

split通用型大文件拆分工具 ,核心价值是简单、高效、跨文件类型 ,日常使用的高频组合

  1. 拆分文本/日志(按行):split -l N -d 源文件 前缀
  2. 拆分二进制/压缩包(按大小):split -b SIZE -d -a N 源文件 前缀
  3. 拆分文本且保留行完整(按大小):split -C SIZE -d 源文件 前缀
  4. 管道实时拆分:命令 | split -l/-b N -d - 前缀
  5. 拆分后还原:cat 前缀* > 原文件名
相关推荐
tomiatomia2 小时前
MinIO docker 部署使用的几个坑
运维·docker·容器
lihe7582 小时前
每天凌晨3点自动同步UBUNTU源
linux·运维·ubuntu·本地源
添砖java‘’3 小时前
线程的互斥与同步
linux·c++·操作系统·线程·信息与通信
86Eric3 小时前
Vagrant 镜像打包与新环境部署全流程实操(避坑指南)
运维·vagrant·virtualbox·vagrantfile
凌寒113 小时前
minio预签名访问地址经过Nginx代理后返回403问题
服务器·网络·nginx
广然3 小时前
EVE-NG 镜像管理工具 1.1 Web 版本正式发布!
运维·服务器·前端
祁鱼鱼鱼鱼鱼3 小时前
DNS 笔记记录
运维·服务器·网络
tod1133 小时前
Makefile进阶(上)
linux·运维·服务器·windows·makefile·进程
阳光九叶草LXGZXJ3 小时前
达梦数据库-学习-50-分区表指定分区清理空洞率(交换分区方式)
linux·运维·数据库·sql·学习