名称
split - 将文件分割成多个文件
简介
split [选项]... [输入 [前缀]]描述
split 命令将输入文件分割成大小相等(或行数相等)的多个小文件,便于传输、存储或进一步处理。如果没有指定输入文件或输入文件为 -,则从标准输入读取。输出文件默认以 x 开头,后跟两个字母(如 xaa、xab),除非指定了其他前缀。
该命令主要用于:
将大文件分割成多个小文件以便通过邮件发送或上传。
将日志文件按大小或行数分块处理。
配合
cat恢复原始文件。
选项
退出状态
0 – 成功。
>0 – 发生错误(例如无法读取输入文件、无效选项、磁盘空间不足等)。
常用示例
1. 按行数分割(每 1000 行一个文件)
split -l 1000 largefile.txt生成 xaa、xab、xac 等文件。
2. 指定输出文件前缀
split -l 500 largefile.txt part_生成 part_aa、part_ab 等。
3. 按大小分割(每个 10MB)
split -b 10M bigfile.bin生成 xaa、xab 等,每个约 10MB。
4. 使用数字后缀
split -d -l 1000 data.txt生成 x00、x01、x02 等。
5. 指定数字后缀起始值和长度
split -d --numeric-suffixes=100 -a 3 data.txt生成 x100、x101、x102 等,后缀长度为 3 位数字。
6. 添加额外后缀(如文件扩展名)
split -l 500 --additional-suffix=.txt data.txt chunk_生成 chunk_aa.txt、chunk_ab.txt 等。
7. 按行数但确保每行完整(最大大小限制)
split -C 2M logfile.txt segment_每个文件最大 2MB,但以行为单位截断,不会将一行拆到两个文件。
8. 从标准输入分割
cat largefile | split -l 1000 - output_从管道读取数据,输出文件以 output_ 开头。
9. 使用十六进制后缀
split -x -l 500 data.txt生成 x00、x01、... x0a、x0b 等(如果支持)。
10. 分割文件并保留空行的处理
split -l 10 --elide-empty-files file.txt如果最后一个文件恰好为空,则不创建该文件。
11. 按自定义分隔符分割记录(例如以 NUL 分隔)
split -t '\0' -l 10 data.bin chunk_以 NUL 字符作为记录分隔符,每 10 条记录一个文件。
12. 合并分割后的文件
cat x?? > restored_file将分割后的所有文件按顺序合并回原文件。
注意事项
默认情况下,
split生成的文件名后缀为两位字母:aa、ab、...、zz。如果分割的份数超过 676(26²),则会增加后缀长度。可以使用-a指定足够长度避免溢出。使用数字后缀时,后缀位数默认为 2,可通过
-a调整,起始值通常为 0(GNU 版本可用--numeric-suffixes=起始值指定)。文件大小单位:
K默认是 1024 字节,M是 1024²,G是 1024³,T是 1024⁴。若要使用 1000 进制,可明确使用KB、MB等(某些版本支持)。建议阅读man split确认支持的单位。当使用
-b分割二进制文件时,split不会检查文件内容,直接按字节切割。合并时需确保顺序正确,否则文件损坏。如果输入文件是普通文件,
split默认会从头开始读取;如果输入是-(标准输入),则从管道读取数据。在脚本中使用时,应考虑磁盘空间和 inode 数量,避免因分割过多文件导致性能问题。
某些
split实现(如 GNU)还支持--filter选项,可以对每个输出片段执行命令(例如压缩),但此功能较高级,可参考手册。
相关命令
csplit– 根据上下文行(正则表达式)分割文件,而非固定大小/行数。cat– 合并文件(用于恢复分割的文件)。head/tail– 提取文件开头或结尾部分。dd– 低级别复制和转换,可按块大小分割。gzip/bzip2– 压缩工具,常与split配合压缩大文件后再分割(或先分割再压缩)。