我知道你可以用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