Linux常用命令-split

命令

split

描述

split a file into pieces
分割文件

用法

1
split [OPTION]... [FILE [PREFIX]]

选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Options:
-a 指定后缀长度,默认为2
-b 指定分割大小,如1K,2KB,10M,30MB
-l 指定分割行数
-d 使用数字后缀
--additional-suffix=SUFFIX 指定分割文件的后缀,如.txt,默认无后缀
--verbose 显示分割详情

SIZE:
K, M, G, T, P, E, Z, Y (1024)
KB, MB, ... (1000)

PREFIX 指定前缀,一般为文件名加.,如file.,a.txt.
默认分割后的文件前缀为x,后缀为aa,ab...,即文件名为xaa,xab...
默认分割文件行数为1000行

注意

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
$ more a
a
b
c
123
abc
# 分割文件a,小于1000行,默认生成的文件名为xaa
$ split a
$ more xaa
a
b
c
123
abc
# 比较两个文件完全一样
$ diff -s a xaa
Files a and xaa are identical
# 指定后缀长度时要考虑到分割文件的数量,否则会提示后缀已用完,导致分割失败
$ split -b3 -a1 xxx
split: output file suffixes exhausted
# -b3指定分割大小为3字节
$ split -b3 a
$ ll x*
-rw-r--r-- 1 root root 3 Feb 15 20:00 xaa
-rw-r--r-- 1 root root 3 Feb 15 20:00 xab
-rw-r--r-- 1 root root 3 Feb 15 20:00 xac
-rw-r--r-- 1 root root 3 Feb 15 20:00 xad
-rw-r--r-- 1 root root 2 Feb 15 20:00 xae
$ more x*
::::::::::::::
xaa
::::::::::::::
a
b
::::::::::::::
xab
::::::::::::::

c
$ rm -rf x*
# -l3指定分割行数为3行
$ split -l3 a
$ ll x*
-rw-r--r-- 1 root root 6 Feb 15 20:02 xaa
-rw-r--r-- 1 root root 8 Feb 15 20:02 xab
$ more x*
::::::::::::::
xaa
::::::::::::::
a
b
c
::::::::::::::
xab
::::::::::::::
123
abc
$ rm -rf x*
# -d使用数字后缀
$ split -l2 -d a
$ ls x*
x00 x01 x02
$ rm -rf x*
# 也可以指定分隔文件的路径和前缀
$ split -l2 -d a /tmp/aa
$ ls /tmp/aa*
/tmp/aa00 /tmp/aa01 /tmp/aa02
$ rm -rf /tmp/aa0*
# 指定文件后缀为.txt
$ split -l2 -d --additional-suffix=.txt --verbose a
creating file ‘x00.txt’
creating file ‘x01.txt’
creating file ‘x02.txt’
$ ls x*
x00.txt x01.txt x02.txt
# 指定前缀a.
$ split -l2 -d --verbose a a.
creating file ‘a.00’
creating file ‘a.01’
creating file ‘a.02’
$ ls a.*
a.00 a.01 a.02

# 压缩包文件的分割和合并
$ ll a.tar.gz
-rw-r--r-- 1 root root 353047 Feb 15 20:12 a.tar.gz
# 如下按照每个文件100K来分割压缩文件,会生成4个分割文件
$ split -b 100K -d a.tar.gz a.tar.gz.
$ ll a.tar.gz*
-rw-r--r-- 1 root root 353047 Feb 15 20:12 a.tar.gz
-rw-r--r-- 1 root root 102400 Feb 15 20:14 a.tar.gz.00
-rw-r--r-- 1 root root 102400 Feb 15 20:14 a.tar.gz.01
-rw-r--r-- 1 root root 102400 Feb 15 20:14 a.tar.gz.02
-rw-r--r-- 1 root root 45847 Feb 15 20:14 a.tar.gz.03
$ mkdir dir1
$ mv a.tar.gz.0* dir1
$ cd dir1
$ ls
a.tar.gz.00 a.tar.gz.01 a.tar.gz.02 a.tar.gz.03
# 直接解压分割文件,同时会生成一个0字节大小的压缩文件a.tar.gz,可以忽略该文件
$ cat a.tar.gz.0* | tar -zx
$ ll
-rw-r--r-- 1 root root 14 Feb 15 19:55 a
-rw------- 1 root root 1552 Nov 27 05:45 anaconda-ks.cfg
-rw-r--r-- 1 root root 37 Feb 15 17:06 a.sh
-rw-r--r-- 1 root root 0 Feb 15 20:12 a.tar.gz
-rw-r--r-- 1 root root 102400 Feb 15 20:15 a.tar.gz.00
-rw-r--r-- 1 root root 102400 Feb 15 20:15 a.tar.gz.01
-rw-r--r-- 1 root root 102400 Feb 15 20:15 a.tar.gz.02
-rw-r--r-- 1 root root 45847 Feb 15 20:15 a.tar.gz.03
-rw-r--r-- 1 root root 13 Feb 15 18:23 b
-rw-r--r-- 1 root root 100 Feb 15 18:14 c
...
# 这里先删除除了a.tar.gz*之外的所有文件
$ ls --hide=a.tar.gz* |xargs rm -rf
$ ll
-rw-r--r-- 1 root root 0 Feb 15 20:12 a.tar.gz
-rw-r--r-- 1 root root 102400 Feb 15 20:15 a.tar.gz.00
-rw-r--r-- 1 root root 102400 Feb 15 20:15 a.tar.gz.01
-rw-r--r-- 1 root root 102400 Feb 15 20:15 a.tar.gz.02
-rw-r--r-- 1 root root 45847 Feb 15 20:15 a.tar.gz.03
# 合并分割文件为完整的压缩包,然后再正常解压文件
$ cat a.tar.gz.0* > a.tar.gz
$ ll
-rw-r--r-- 1 root root 353047 Feb 15 20:30 a.tar.gz
-rw-r--r-- 1 root root 102400 Feb 15 20:15 a.tar.gz.00
-rw-r--r-- 1 root root 102400 Feb 15 20:15 a.tar.gz.01
-rw-r--r-- 1 root root 102400 Feb 15 20:15 a.tar.gz.02
-rw-r--r-- 1 root root 45847 Feb 15 20:15 a.tar.gz.03
$ tar -zxf a.tar.gz