侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux split命令教程:如何分割大文件为小文件(附实例及用法详解)

Linux split命令介绍

Linux split命令是用来将一个大文件分割成多个小文件的工具。它可以根据不同的参数来自定义分割的方式,例如按照行数、字节数、块数等。分割后的文件名由指定的前缀和后缀组成,如果没有指定前缀,默认为x,如果没有指定后缀,默认为两位字母,从aa开始递增。split命令通常用于处理日志文件、压缩文件等较大的文件,以便于分析和传输。

Linux split命令适用的Linux版本

Linux split命令是GNU coreutils的一部分,因此它适用于大多数Linux发行版,如Ubuntu, Debian, Fedora, CentOS等。如果某些Linux系统没有安装split命令,可以使用包管理器来安装coreutils包,例如:

  • 在基于Debian的系统上,使用apt命令:
[linux@bashcommandnotfound.cn ~]$ sudo apt update
[linux@bashcommandnotfound.cn ~]$ sudo apt install coreutils
  • 在基于Red Hat的系统上,使用yum或dnf命令:
[linux@bashcommandnotfound.cn ~]$ sudo yum update
[linux@bashcommandnotfound.cn ~]$ sudo yum install coreutils

或者

[linux@bashcommandnotfound.cn ~]$ sudo dnf update
[linux@bashcommandnotfound.cn ~]$ sudo dnf install coreutils

Linux split命令的基本语法

split命令的基本语法如下:

split [options] filename [prefix]

其中,options是可选的参数,用来指定分割的方式和输出的格式;filename是要分割的文件名,如果没有指定或者为-,则从标准输入读取数据;prefix是输出文件的前缀,如果没有指定,默认为x。

Linux split命令的常用选项说明

split命令有很多选项,可以根据不同的需求来调整分割的方式和输出的格式。以下是一些常用的选项:

选项说明
-a, --suffix-length=N指定后缀的长度,N是一个正整数,默认为2
--additional-suffix=SUFFIX为输出文件添加额外的后缀,SUFFIX是一个字符串
-b, --bytes=SIZE指定每个输出文件的字节数,SIZE是一个整数和可选的单位,例如10K表示10*1024字节,单位可以是K,M,G,T,P,E,Z,Y,R,Q(1024的幂)或KB,MB,...(1000的幂),也可以使用二进制前缀,例如KiB=K,MiB=M等
-C, --line-bytes=SIZE指定每个输出文件的最大字节数,但不分割行,SIZE的格式同上
-d, --numeric-suffixes[=FROM]使用数字后缀而不是字母后缀,FROM是一个可选的起始值,默认为0
-e, --elide-empty-files不生成空的输出文件
--filter=COMMAND将输出文件写入到shell命令中,文件名为$FILE
-l, --lines=NUMBER指定每个输出文件的行数,NUMBER是一个正整数
-n, --number=CHUNKS指定生成的输出文件的数量,CHUNKS可以是以下格式之一:
N:根据输入文件的大小平均分割成N个文件
K/N:输出第K个(从0开始)N分之一的文件到标准输出
l/N:根据输入文件的行数平均分割成N个文件,不分割行
l/K/N:输出第K个(从0开始)N分之一的文件到标准输出,不分割行
r/N:类似于l/N,但使用轮询分配法
r/K/N:类似于l/K/N,但使用轮询分配法
-t, --separator=SEP使用SEP作为记录分隔符,而不是换行符,\0(零)表示NUL字符
-u, --unbuffered在使用-n r/...时,立即将输入复制到输出
--verbose在打开每个输出文件之前,打印诊断信息
--help显示帮助信息并退出
--version显示版本信息并退出

Linux split命令的实例

以下是一些使用split命令的实例,假设有一个名为data.txt的文件,内容如下:

This is a sample file
for demonstrating the
split command in Linux
  • 按照默认方式分割文件,每个文件1000行,前缀为x:
[linux@bashcommandnotfound.cn ~]$ split data.txt
[linux@bashcommandnotfound.cn ~]$ ls
data.txt  xaa
[linux@bashcommandnotfound.cn ~]$ cat xaa
This is a sample file
for demonstrating the
split command in Linux
  • 按照指定的行数分割文件,每个文件2行,前缀为part:
[linux@bashcommandnotfound.cn ~]$ split -l 2 data.txt part
[linux@bashcommandnotfound.cn ~]$ ls
data.txt  partaa  partab
[linux@bashcommandnotfound.cn ~]$ cat partaa
This is a sample file
for demonstrating the
[linux@bashcommandnotfound.cn ~]$ cat partab
split command in Linux
  • 按照指定的字节数分割文件,每个文件10字节,前缀为chunk,后缀长度为3:
[linux@bashcommandnotfound.cn ~]$ split -b 10 -a 3 data.txt chunk
[linux@bashcommandnotfound.cn ~]$ ls
chunkaaa  chunkaab  chunkaac  chunkaad  chunkaae  data.txt
[linux@bashcommandnotfound.cn ~]$ cat chunkaaa
This is a 
[linux@bashcommandnotfound.cn ~]$ cat chunkaab
sample fil
[linux@bashcommandnotfound.cn ~]$ cat chunkaac
e
for demon
[linux@bashcommandnotfound.cn ~]$ cat chunkaad
strating t
[linux@bashcommandnotfound.cn ~]$ cat chunkaae
he
split co
  • 按照指定的字节数分割文件,每个文件10字节,但不分割行,前缀为line,后缀为数字:
[linux@bashcommandnotfound.cn ~]$ split -C 10 -d data.txt line
[linux@bashcommandnotfound.cn ~]$ ls
data.txt  line00  line01  line02
[linux@bashcommandnotfound.cn ~]$ cat line00
This is a sample file
[linux@bashcommandnotfound.cn ~]$ cat line01
for demonstrating the
[linux@bashcommandnotfound.cn ~]$ cat line02
split command in Linux
  • 分割文件为3个等大小的部分,输出第2个部分到标准输出,前缀为out:
[linux@bashcommandnotfound.cn ~]$ split -n 2/3 data.txt out
[linux@bashcommandnotfound.cn ~]$ cat out
for demonstrating the
split command in Linux
  • 分割文件为3个等行数的部分,输出第1个部分到标准输出,不分割行,前缀为seg:
[linux@bashcommandnotfound.cn ~]$ split -n l/3 data.txt seg
[linux@bashcommandnotfound.cn ~]$ cat seg
This is a sample file
  • 分割文件为3个等行数的部分,使用轮询分配法,输出第0个部分到标准输出,不分割行,前缀为rr:
[linux@bashcommandnotfound.cn ~]$ split -n r/3 data.txt rr
[linux@bashcommandnotfound.cn ~]$ cat rr
This is a sample file
  • 分割文件为2个部分,添加额外的后缀.txt,前缀为sub:
[linux@bashcommandnotfound.cn ~]$ split -n 2 --additional-suffix=.txt sub
[linux@bashcommandnotfound.cn ~]$ ls
data.txt  sub00.txt  sub01.txt
[linux@bashcommandnotfound.cn ~]$ cat sub00.txt
This is a sample file
for demonstrating the
[linux@bashcommandnotfound.cn ~]$ cat sub01.txt
split command in Linux
  • 分割文件为2个部分,将输出文件写入到gzip命令中进行压缩,前缀为zip:
[linux@bashcommandnotfound.cn ~]$ split -n 2 --filter='gzip > $FILE.gz' data.txt zip
[linux@bashcommandnotfound.cn ~]$ ls
data.txt  zip00.gz  zip01.gz
[linux@bashcommandnotfound.cn ~]$ gunzip -c zip00.gz
This is a sample file
for demonstrating the
[linux@bashcommandnotfound.cn ~]$ gunzip -c zip01.gz
split command in Linux
  • 分割文件为2个部分,打印诊断信息,前缀为info:
[linux@bashcommandnotfound.cn ~]$ split -n 2 --verbose data.txt info
creating file 'info00'
creating file 'info01'
[linux@bashcommandnotfound.cn ~]$ ls
data.txt  info00  info01
[linux@bashcommandnotfound.cn ~]$ cat info00
This is a sample file
for demonstrating the
[linux@bashcommandnotfound.cn ~]$ cat info01
split command in Linux

Linux split命令的注意事项

  • split命令不会修改原始文件,只会生成新的文件。
  • split命令不会检查输出文件是否已经存在,如果存在,会覆盖原来的文件。
  • split命令不会自动合并分割后的文件,可以使用cat命令来手动合并,例如:
[linux@bashcommandnotfound.cn ~]$ cat xaa xab xac > data.txt
  • split命令不会保留文件的元数据,如权限、所有者、时间戳等,如果需要保留,可以使用cp命令的-p选项来复制文件,例如:
[linux@bashcommandnotfound.cn ~]$ cp -p data.txt data.bak
[linux@bashcommandnotfound.cn ~]$ split data.bak
[linux@bashcommandnotfound.cn ~]$ cp -p xaa xab xac data.txt
0

评论区