Shell GNU split(UNIX命令)在到达“后创建与模式不匹配的文件”;z";
所以我正在分割一些大文件,所有的工作都正常,直到一个81GB的文件出现在场景中。split命令似乎完成了它的任务,但最后的文件有一个不相关的名称。看图片的右下角 我使用的命令如下: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紧随其后
split -b 125M ./2014.txt 2014/2014_
任何人都知道为什么不创建文件
2014_-za
而创建2014_-zaaa
?您只能有676个名为[a-z][a-z]
的文件,而您的命令需要更多
以下是split
可以执行的操作的一些选项:
\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文件句柄)。有一个错误报告解释了这种拆分行为: