情景介紹
平時工作中,我習(xí)慣使用rz從本地上傳文件到服務(wù)器,sz從服務(wù)器下載文件到本地,但對傳輸文件大小有限制,例如排查線上jvm的問題,需要生成了dump文件,可能有10G大,超過了限制,怎么下載呢?
拆分文件命令之split
語法
split [-<行數(shù)>][-l<行數(shù)>][-b<字節(jié)>][-C<字節(jié)>][要切割的文件][輸出文件名的前綴][-a<后綴長度>]
- 或-l :指定每多少行切成一個小文件 行數(shù)> 行數(shù)>
-b :指定每多少字節(jié)切成一個小文件,這里也可以指定K、M、G等單位 字節(jié)>
-C :與-b 類似,但在切割時會盡量維持每行的完整性 字節(jié)> 字節(jié)>
輸出文件名的前綴:設(shè)置拆分后文件的名稱前綴,split會自動在前綴后面加上編號,默認(rèn)從aa開始
-a :默認(rèn)后綴長度是2,即按 aa,ab,ac的順序排序 后綴長度>
split命令和cat命令可以完成上面的難題,排查線上問題的現(xiàn)場已經(jīng)沒有了,所以為了演示,用dd命令(對dd命令不了解的也可以學(xué)下,因?yàn)檫@次重點(diǎn)介紹split,所以dd暫且不介紹)創(chuàng)建一個400MB的文件,文件名是adsearch.hprof,這里假設(shè)400MB的大小就超過了服務(wù)器的下載限制
dd if=/dev/zero bs=1024 count=409600 of=adsearch.hprof
如圖所示,創(chuàng)建了一個400MB的文件
那我把a(bǔ)dsearch.hprof文件按100MB大小拆分,可以拆分成4個文件
split -b 100M adsearch.hprof
可以看到在執(zhí)行完split命令后,目錄下生成了四個相同大小 xaa、xab、xac、xad四個100MB的小文件。因?yàn)槲覀儧]有指定前綴,就采用了默認(rèn)的前綴x,后面跟著aa、ab、ac、ad。我們也可以指定前綴,比如我把剛剛生成的四個小文件刪掉,用下面的命令重新切分下
split -b 100M adsearch.hprof adsearch-
合并文件之cat
把大文件切分后,我們就可以把小文件下載到本地,然后把他們再拼接起來
// 用通配符的形式,要保證該目錄下沒有其他以adsearch-a為前綴的文件
cat adsearch-a* > adsearch.hprof
// 或者指定文件進(jìn)行拼接
cat adsearch-aa adsearch-ab adsearch-ac adsearch-ad > adsearch.hprof
備注
上面的操作我是在win本上的gitbash操作的,有cat命令
那如果沒有安裝gitbash只有cmd呢?
可以使用copy /b 命令來拼接,其中 /b 代表指定以二進(jìn)制格式進(jìn)行復(fù)制
copy /b adsearch-aa + adsearch-ab + adsearch-ac + adsearch-ad adsearch.hprof
校驗(yàn)
經(jīng)過拆分-合并后,兩個文件一樣嗎?這是我們主要關(guān)心的問題,我們對文件做一個md5,看結(jié)果是否相等,就可以判斷文件是否一樣了
原始文件的md5
合并后文件的md5(gitbash)
合并后文件的md5(cmd)
經(jīng)過對前后文件的md5值比價,結(jié)果一致,說明我們的操作沒有問題
小結(jié)
當(dāng)我們下載或上傳相對較大的文件時,可以使用split把大文件拆分成小文件,然后用cat命令把這些小文件重新拼接成大文件