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
评论区