我知道您可以使用split
拆分文件,但出于测试目的,我想将大文件拆分为大小不同的块。这可能吗?
或者,如果上述文件是zip,是否有办法将其拆分为不等大小的卷?
欢迎任何建议!谢谢!
答案 0 :(得分:2)
因此,您要问的一般问题是:如何计算总计为N
的{{1}}个随机整数?具体来说,S
是文件的大小,S
是要将其分成多少个较小的文件。
例如,假设您要将文件拆分为4个部分。如果N
,a
,b
和c
是四个随机数,则:
d
给我们四个随机数,总和为a + b + c + d = X
a/X + b/X + c/X + d/X = 1
S*a/X + S*b/X + S*c/X + S*d/X = S
,即文件的大小。
这意味着您要编写一个脚本:
S
个随机数(任意随机数)。N
计算为这些随机数的总和。X
(并确保剩下的整数大于0的总和为S)这对于一个shell脚本来说有点多,但在像Perl这样的东西中会很简单。
答案 1 :(得分:1)
因为您只使用shell标记了问题。所以我想你只想用shell脚本和那些常见的linux命令/工具来处理它。
据我所知,没有现有工具/ cmd可以随机拆分文件。要拆分文件,我们可以考虑使用split, dd
这两个工具都支持以下选项:分割文件的大小(大小)或者要分割的文件数量。比方说,我们使用dd / split首先将文件分成500个部分,每个文件都有相同的大小。所以我们有:
foo.zip.001
foo.zip.002
foo.zip.003
...
foo.zip.500
然后我们将此文件列表作为输入,进行合并(cat)。这一步可以通过awk或shell脚本完成。
例如,我们可以构建一组cat
语句,如:
cat foo.zip.001, foo.zip.002 > part1
cat foo.zip.003, foo.zip.004, foo.zip.005 > part2
cat foo.zip.006, foo.zip.007, foo.zip.008, foo.zip.009 > part3
....
运行生成的cat语句,你得到最终part1-n
,每个部分都有不同的大小。
例如:
kent$ seq -f'foo.zip.%g' 20|awk 'BEGIN{i=k=2}NR<i{s=s sprintf ("%s,",$0);next}{k++;i=(NR+k);print "cat "s$0" >part"k-2;s="" }'
cat foo.zip.1,foo.zip.2 >part1
cat foo.zip.3,foo.zip.4,foo.zip.5 >part2
cat foo.zip.6,foo.zip.7,foo.zip.8,foo.zip.9 >part3
cat foo.zip.10,foo.zip.11,foo.zip.12,foo.zip.13,foo.zip.14 >part4
cat foo.zip.15,foo.zip.16,foo.zip.17,foo.zip.18,foo.zip.19,foo.zip.20 >part5
但是你必须自己测试的性能如何......至少这应该适合你的要求。