Shell GNU split(UNIX命令)在到达“后创建与模式不匹配的文件”;z";

Shell GNU split(UNIX命令)在到达“后创建与模式不匹配的文件”;z";,shell,unix,split,gnu-coreutils,Shell,Unix,Split,Gnu Coreutils,所以我正在分割一些大文件,所有的工作都正常,直到一个81GB的文件出现在场景中。split命令似乎完成了它的任务,但最后的文件有一个不相关的名称。看图片的右下角 我使用的命令如下: split -b 125M ./2014.txt 2014/2014_ 任何人都知道为什么不创建文件2014_-za而创建2014_-zaaa?您只能有676个名为[a-z][a-z]的文件,而您的命令需要更多 以下是split可以执行的操作的一些选项: 撞车 这是POSIX强制执行的行为,macOS紧随其后

所以我正在分割一些大文件,所有的工作都正常,直到一个81GB的文件出现在场景中。split命令似乎完成了它的任务,但最后的文件有一个不相关的名称。看图片的右下角

我使用的命令如下:

split -b 125M ./2014.txt 2014/2014_ 

任何人都知道为什么不创建文件
2014_-za
而创建
2014_-zaaa

您只能有676个名为
[a-z][a-z]
的文件,而您的命令需要更多

以下是
split
可以执行的操作的一些选项:

  • 撞车

    这是POSIX强制执行的行为,macOS紧随其后

  • 开始写更大的后缀

    这是一个错误的选择,因为在
    \uzz
    之后出现
    \uaaa
    ,但现在文件将以错误的顺序显示在
    ls
    中,并且
    cat*
    将不再以正确的顺序加入它们

  • 保存最后一个范围,
    \u z
    ,以获得更长的后缀

    这是一个很好的选择,因为在
    \u yz
    之后是
    \u zaaa
    ,它有增长的空间,但仍然按字母顺序排列。这就是GNU所做的,以及您所看到的行为


  • 如果您希望所有的名称都是统一的,而不触发任何这些行为,那么只需使用一个更大的后缀长度和
    -a6
    ,以确保您有足够的空间。

    split
    实际上不是bash的一部分。它完全可以安装在没有bash的机器上。您可以从Python、C或任何其他语言调用它;它没有附带shell(包含在其源代码中),也没有任何其他有意义的bash组件。@IvánRodríguezTorres,因为如果它创建了_za和_zb,当按字母顺序排序时,这些片段将不再有序。您将无法再执行
    cat 2014.*
    重新加入它。GNU split是智能的,并且为更长的前缀保留了_z*(顺便说一下,BSD实现失败,退出状态为非零,并且在溢出
    _zz
    时出现错误“文件太多”)。@IvánRodríguezTorres,……公平地说,我运行的测试场景使用的是来自管道的输入,从而防止它提前检测内容量。从文件输入时,它可能会表现得更好,可以使用
    stat()
    调用来检测其大小。(这就是为什么将
    bar
    替换为
    cat foo | bar
    更好的原因之一:前者提供了一个直接的
    stat
    able文件句柄)。有一个错误报告解释了这种拆分行为: