「split(1)」-

  LINUX MANUAL PAGES

将文件分割成多个小文件

命令语法格式

split [OPTION]… [FILE [PREFIX]]

命令描述

split创建输出文件,该输出文件中由连续或交错的FILE中的部分内容组成。

默认情况下,split将输入文件的每1000行写入一个新的输出文件。

输出文件的名称由前缀(默认为’x’),然后跟一组字符组成(默认为’aa’,’ab’,…)。如果按文件名的顺序重新连接文件可以生成原始输入文件(除-nr/n外)。默认情况下,split会创建带有两个生成后缀字符的文件,并且当下一个最重要的位置到达最后一个字符时,会将此宽度增加两个(’yz’,’zaaa’,’zaab’,…)。通过这种方式可以支持任意数量的输出文件,即使在存在–additional-suffix选项的情况下,也可以按上述方式进行排序。如果指定了-a选项并且输出文件名称已用尽,则split会报告错误而不删除它所创建的输出文件。

如果没有指定FILE或者FILE为`-`,则从标准输入中读取文件内容。

命令支持的选项及含义

必须提供给长选项的参数也必须提供给对应的短选项。

-b, –bytes=SIZE
将SIZE字节的输入数据放入每个输出文件中。SIZE可以是一个整数,或可以是一个整数后跟一个以下后缀:

‘b’ => 512 (“blocks”)

‘KB’ => 1000 (KiloBytes)

‘K’ => 1024 (KibiBytes)

‘MB’ => 1000*1000 (MegaBytes)

‘M’ => 1024*1024 (MebiBytes)

‘GB’ => 1000*1000*1000 (GigaBytes)

‘G’ => 1024*1024*1024 (GibiBytes)

同样的还有‘T’, ‘P’, ‘E’, ‘Z’, ‘Y’。

-C, –line-bytes=SIZE
在每个输出文件中,写入尽可能多的完整行,但是不能超过SIZE字节。如果单个行的长度大于SIZE字节,它会被分成多个文件中。SIZE与–bytes选项的格式相同,也可以使用后缀。

–filter=COMMAND
使用此选项时,split不是简单地将内容写入每个输出文件,而是通过管道将每个输出文件数据传递给指定的SHELL命令。命令应该使用$FILE环境变量,该变量为每个命令的调用设置为不同的输出文件名。

例如,假设你有一个1TiB压缩文件,如果未压缩,文件太大而无法驻留在磁盘上,但你必须将其分割成单独压缩的更易于管理的文件,可以用下面的命令:

# xz -dc BIG.xz | split -b200G –filter=’xz > $FILE.xz’ – big-

假设压缩比为10:1,则会创建大约50个名为big-aa.xz,big-ab.xz,big-ac.xz等的20GiB文件。

-l, –lines=NUMBER
将输入文件的每NUMBER行放入一个新的输出文件中。

为了兼容性,split还支持过时的选项语法-NUMBER。比如-5,-4…。新脚本中应该使用–line=NUMBER的形式代替旧的用法。

-n, –number=CHUNKS
将输入分割成CHUNKS个文件。CHUNKS的取值如下:

n 根据当前输入的数据大小,生成n个文件。

k/n 将生成的n个文件中的第k个文件的内容输出到标准输出中。

l/n 生成n个文件,但是没有分割行。

l/k/n 同样的,但是只输出n个文件中的第k个文件的内容到标准输出中。

r/n 类似于‘l’,但是轮流分配。

r/k/n 类似的,但是只输出n个文件中的第k个文件的内容到标准输出中。

在将输入划分为n个块后,所有剩余的字节会被分配给最后一个块。在初始计算后出现的任何多余字节会被直接丢弃(除非使用’r’模式)。

即使行数少于n行,或输入被截断,也会创建n个文件。

对于’l’模式,CHUNKS大约是输入数据的大小除以n。输入被分成n个相等大小的部分,任何多余部分会被分配给最后的文件。如果某行在分区内开始,则会将其完全写入相应的文件。由于行或记录即使与某个分区重叠也不会被分割,因此写入的文件可能大于或小于分区大小,如果行的长度到与分区完全重叠,则甚至可能为空。

对于’r’模式,输入的大小是不相关的,例如可以是管道。

-t, –separator=SEP
使用字符SEP作为分隔符,而不是默认换行符(ASCII LF)。要指定ASCII NUL作为分隔符,请使用字符序列’\0’,例如’split -t ‘\0’。

-u, –unbuffered
–number r/…模式中,立即将输入复制到输出,这是一种慢得多的操作模式。

-e, –elide-empty-files
不要生成零长度的文件。可能发生这种情况的情形是使用了–number选项,如果文件短于number要求的长度。或者一个行太长了,要跨块。

即使指定了此选项,输出文件序列号也始终连续运行。

修改文件名

-a, –suffix-length=N
指定文件名后缀的长度为N。如果N为0,则忽略该选项,转而启用默认值,默认后缀长度为2。除非指定了-n或–numeric-suffixes选项,否则会根据需要自动将长度增加2。

–additional-suffix=SUFFIX
向文件名中添加一个附加的后缀SUFFIX。但是注意,SUFFIX中不能包含斜线。

-d, –numeric-suffixes[=FROM]
-d选项表示使用数字类型的后缀,从0开始,而不是使用字母。-d选项没有参数。

FROM只支持在长选项–numeric-suffixes[=FROM]中使用,用于为单次运行设置初始的后缀,或者为独立分割输入设置后缀偏移量,因此上述自动后缀长度扩展功能被禁用。因此,你可能还想使用选项-a来允许超出数值’99’的后缀。请注意,如果指定了选项–number并且文件数小于FROM,则假定进行一次运行,并自动确定所需的最小后缀长度。

-x, –hex-suffixes[=from]
像–numeric-suffixes一样,但使用文件名中使用十六进制数字(小写)。

调试选项

–verbose
在每个输出文件打开之前写一个诊断。

其他选项

–help
显示帮助信息并退出。

–version
显示版本信息并退出。

相关手册

查看在线手册:http://www.gnu.org/software/coreutils/split

查看info手册:info ‘(coreutils) split invocation’

参考文献

  • man 1 split, version GNU coreutils 8.26

更新日志

  • 06/07/2018 首次创建文章,以前只是知道这个命令。这次是第一次看。