,然后代替:
split -b 10485760 Big.file BigFilePiece.
我可以做:
cat BigFile | bigFileProcessor
代替它。
但是,我找不到能保证星号(又称通配符,又称
*
)的扩展始终按字母顺序排列的地方,因此.aa
早于.ab
(相对于是时间戳记订购之类的东西。)此外,我的计划中是否有任何缺陷?
cat
一起执行文件的性能成本有多高?#1 楼
是的,通配符扩展是按字母顺序进行的。选项已设置,bash扫描每个单词man
,-f
和*
。如果出现这些字符之一,则将该单词视为一个模式,并替换为与该模式匹配的文件名称的按字母顺序排序的
列表。
评论
@Dennis Williamson,如果用户设置了不同的语言集,这是否仍然适用?
– Zoredache
2010-03-15 22:35
@Zoredache:它实际上是由POSIX指定的:opengroup.org/onlinepubs/007908775/xsh/glob.html“路径名按LC_COLLATE类别的当前设置所定义的排序顺序,请参阅XBD规范LC_COLLATE [opengroup.org / onlinepubs / 007908775 / xbd /…”,这就是为什么您应该执行ls -l [[:lower:]]而不是ls -l [az]之类的原因。
–丹尼斯·威廉姆森
10 Mar 16 '10 at 0:31
请注意,该顺序是按字母顺序排列的,因此BigFilePiece.10将排在BigFilePiece.2之前
–肯
14年7月24日在13:14
@DennisWilliamson-为什么两对方括号?一个人似乎对我完全一样。
–ArtOfWarfare
18年3月14日在21:08
@ArtOfWarfare:尝试一下:mkdir lctest; cd lctest;触摸w;触摸z; ls -l [:lower:];回声=====; ls -l [[:lower:]]。 “ z”文件仅在第二个ls之前列出,因为它要求使用小写的单字母文件名。第一个ls(不带方括号的字符)从字符“:”,“ l”,“ o”,“ w”,“ e”和“ r”列表中询问单字符文件名。在这两种情况下,最外面的方括号定界了一个括号表达式,其中列出了字符和类。在[[:: lower:]]的情况下,内部方括号,冒号和单词为字符类。 ...
–丹尼斯·威廉姆森
18年3月15日在17:06
#2 楼
它是bash
的行为记录,因此您可以在脚本中依赖它。在很长一段时间内,其他Bourne兼容外壳也是如此……尽管可能存在与大小写折叠或非字母数字字符有关的特殊情况。以几乎“ ASCII字母”的顺序---区别在于小写和大写字母将被整理到一起,就好像没有大小写差异一样,只是小写字母在它们的大写等价物之前被整理。 (以ASCII格式显示)。
正如其他人指出的那样,这可能会受到与语言相关的环境设置的干扰:通常为LANG,更具体地说为LC_COLLATE。在
bash
命令下清除依赖于glob扩展顺序的命令来清除环境(适当时使用env
或-i
)或将结果通过-u
传递以确保可靠的排序是最安全的。评论
看来在排序过程中所有非字母数字都被忽略了。因此,不能使用“ =”,“ _”,“〜”来强制文件开始或结束列表。
–奥修斯
2012年1月20日上午11:46
评论
当然,您采用的是错误的方法。如果管理员对存储库中文件的大小设置了限制,则应与他联系。关于扩展-我一直看到扩展是字母数字的。如果需要任何其他顺序操作,则始终可以通过排序进行管道传递。
请注意,Mercurial可以管理任何大小的文件,受您拥有的RAM数量限制。如果添加大文件,则会收到警告,因为Mercurial假定它可以将文件保存在内存中。对于合并,Mercurial需要在内存中保存两个文件。因此,具有少量RAM的计算机可能无法检出文件。我刚刚进行了测试,对一个N MB文件的hg commit需要大约3 * N MB的RAM,而hg update需要大约2 * N MB的RAM。这是Linux上的Mercurial 1.5。