我知道你可以用split
来分割一个文件,但为了测试的目的,我想将一个大文件分割成大小不同的块。这可能吗?有没有办法将大文件拆分为随机大小的块?
另外,如果上述文件是一个zip文件,有没有办法将它分成不等大小的卷?
欢迎任何建议!谢谢!
我知道你可以用split
来分割一个文件,但为了测试的目的,我想将一个大文件分割成大小不同的块。这可能吗?有没有办法将大文件拆分为随机大小的块?
另外,如果上述文件是一个zip文件,有没有办法将它分成不等大小的卷?
欢迎任何建议!谢谢!
因为您只用shell标记了问题。所以我想你只想用shell脚本和那些常用的linux命令/工具来处理它。
据我所知,没有现有的工具/ CMD可以随机分割文件。要拆分文件,我们可以考虑使用split, dd
这两个工具都支持诸如拆分文件的大小(大小)或拆分多少个文件等选项。比方说,我们先使用dd/split将文件分割成500个部分,每个文件具有相同的大小。所以我们有:
foo.zip.001
foo.zip.002
foo.zip.003
...
foo.zip.500
然后我们把这个文件列表作为输入,做合并(猫)。这一步可以通过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
....
运行生成的报表猫,你有最后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
但怎么是你要测试你自己的表现......至少这应该适用于您的需求。
+1:整洁的方式,谢谢!我会放弃它。在性能方面:这确实不是问题,因为它将是一代人。我只是想知道如何处理它,如果我想最终还有固定数量的生成文件。 – carlspring
所以你问的一般问题是:我怎样才能计算N
随机整数总和为S
?具体而言,S
是文件的大小,而N
是您要将其分解成多少个较小的文件。
例如,假设您要将文件分成4个部分。如果a
,b
,c
和d
有4张随机数,则:
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
给予我们4个随机数字,总和S
,你的文件的大小。
这意味着你会想编写一个脚本,:
N
随机数(任意随机数)。X
作为那些随机数的总和。S/X
(并确保你留下了大于0的整数那笔S)这对于一个shell脚本来说有点多,但是对于像Perl这样的东西来说,它会非常简单。
感谢所有的数学。相当有帮助。我会接受肯特的解决方案,因为它也是一个实现(尽管不包含大小的部分)。谢谢! – carlspring
你想拆分多少个零件?他们应该有多不同? – Kent
让我们说一百个部分,每个部分从几个megs变化到最多约150 mb。 – carlspring
你需要这个想法或者运行代码吗? – Kent