使用 GNU 拆分的错误数字后缀
Wrong numeric suffix using GNU split
我有一个大 (1.8GB) 文件,我想将其拆分为最大 100MB 的文件。为此,我使用 GNU split 函数和选项 -d。生成的数字后缀很奇怪。直到 89,一切都很好,但是从 9000 开始,然后是 9001,...等等。有谁知道我为什么会出现这种奇怪的行为?
split
的这种行为可能出乎意料,但 intended this way。
为了在保持正确的词汇顺序的同时创建任意数量的文件,后缀生成器在其第一个位置达到可能的最高数字时扩展数字的数量。
词法顺序是使用 cat 轻松反转拆分所必需的:
split foo bar_
cat bar_* > foo
如果不维护词汇顺序,新的 foo
将会混乱。
要实现连续数字作为后缀,可以加上-a <n>
参数,其中<n>
是位数。
以下命令将生成文件 foo_000
到 foo_199
:
seq 20000 | split -d -a 3 -l 100 - foo_
但是,您需要选择足够大的数字来生成您需要的所有后缀,否则 split
命令将过早终止并显示错误消息:
split: output file suffixes exhausted
此问题已包含在 GNU coreutils gotchas 页面
我有一个大 (1.8GB) 文件,我想将其拆分为最大 100MB 的文件。为此,我使用 GNU split 函数和选项 -d。生成的数字后缀很奇怪。直到 89,一切都很好,但是从 9000 开始,然后是 9001,...等等。有谁知道我为什么会出现这种奇怪的行为?
split
的这种行为可能出乎意料,但 intended this way。
为了在保持正确的词汇顺序的同时创建任意数量的文件,后缀生成器在其第一个位置达到可能的最高数字时扩展数字的数量。
词法顺序是使用 cat 轻松反转拆分所必需的:
split foo bar_
cat bar_* > foo
如果不维护词汇顺序,新的 foo
将会混乱。
要实现连续数字作为后缀,可以加上-a <n>
参数,其中<n>
是位数。
以下命令将生成文件 foo_000
到 foo_199
:
seq 20000 | split -d -a 3 -l 100 - foo_
但是,您需要选择足够大的数字来生成您需要的所有后缀,否则 split
命令将过早终止并显示错误消息:
split: output file suffixes exhausted
此问题已包含在 GNU coreutils gotchas 页面