使用GNU拆分的数字后缀错误

ret*_*rot 3 bash shell command-line gnu gnu-coreutils

我有一个大的(1.8GB)文件,我想分成最大100MB的文件.为此,我使用GNU拆分功能,选项-d.结果数字后缀很奇怪.直到89,一切都很好,但随后它从9000开始,然后是9001,......等等.有没有人知道为什么我会得到这种奇怪的行为?

chw*_*w21 8

这种行为split可能是意料之外的,但它是这样的.

在保持正确的词法顺序的同时创建任意数量的文件时,后缀生成器在其第一个第一个位置达到可能的最高位数时会扩展位数.

语法顺序是使用cat轻松反转拆分所必需的:

split foo bar_
cat bar_* > foo
Run Code Online (Sandbox Code Playgroud)

如果没有保持词汇顺序,那么新的foo就会混乱.

要将连续数字作为后缀,可以添加-a <n>参数,其中<n>是数字位数.

以下命令将foo_000通过以下方式生成文件foo_199:

seq 20000 | split -d -a 3 -l 100 - foo_
Run Code Online (Sandbox Code Playgroud)

但是,您可以选择足够大的数字来生成所需的所有后缀,否则split命令会提前终止并显示错误消息:

split: output file suffixes exhausted
Run Code Online (Sandbox Code Playgroud)

此问题已包含在GNU coreutils 陷阱页面中