5分鐘學linux命令之split

情景介紹

平時工做中,我習慣使用rz從本地上傳文件到服務器,sz從服務器下載文件到本地,但對傳輸文件大小有限制,例如排查線上jvm的問題,須要生成了dump文件,可能有10G大,超過了限制,怎麼下載呢?git

拆分文件命令之split

語法bash

split [-<行數>][-l<行數>][-b<字節>][-C<字節>][要切割的文件][輸出文件名的前綴][-a<後綴長度>]複製代碼

- <行數> 或-l <行數> :指定每多少行切成一個小文件 服務器

-b <字節> :指定每多少字節切成一個小文件,這裏也能夠指定K、M、G等單位 jvm

-C <字節> :與-b <字節> 相似,但在切割時會盡可能維持每行的完整性 spa

輸出文件名的前綴:設置拆分後文件的名稱前綴,split會自動在前綴後面加上編號,默認從aa開始code

-a <後綴長度> :默認後綴長度是2,即按 aa,ab,ac的順序排序 cdn


split命令和cat命令能夠完成上面的難題,排查線上問題的現場已經沒有了,因此爲了演示,用dd命令(對dd命令不瞭解的也能夠學下,由於此次重點介紹split,因此dd暫且不介紹)建立一個400MB的文件,文件名是adsearch.hprof,這裏假設400MB的大小就超過了服務器的下載限制blog

dd if=/dev/zero bs=1024 count=409600 of=adsearch.hprof複製代碼

file

如圖所示,建立了一個400MB的文件排序


那我把adsearch.hprof文件按100MB大小拆分,能夠拆分紅4個文件md5

split -b 100M adsearch.hprof複製代碼

file

能夠看到在執行完split命令後,目錄下生成了四個相同大小 xaa、xab、xac、xad四個100MB的小文件。由於咱們沒有指定前綴,就採用了默認的前綴x,後面跟着aa、ab、ac、ad。咱們也能夠指定前綴,好比我把剛剛生成的四個小文件刪掉,用下面的命令從新切分下

split -b 100M adsearch.hprof adsearch-複製代碼

file


合併文件之cat

把大文件切分後,咱們就能夠把小文件下載到本地,而後把他們再拼接起來

// 用通配符的形式,要保證該目錄下沒有其餘以adsearch-a爲前綴的文件
cat adsearch-a* > adsearch.hprof
// 或者指定文件進行拼接
cat adsearch-aa adsearch-ab adsearch-ac adsearch-ad > adsearch.hprof複製代碼

file


備註

上面的操做我是在win本上的gitbash操做的,有cat命令


那若是沒有安裝gitbash只有cmd呢?

可使用copy /b 命令來拼接,其中 /b 表明指定以二進制格式進行復制

copy /b adsearch-aa + adsearch-ab + adsearch-ac + adsearch-ad adsearch.hprof複製代碼


校驗

通過拆分-合併後,兩個文件同樣嗎?這是咱們主要關心的問題,咱們對文件作一個md5,看結果是否相等,就能夠判斷文件是否同樣了

原始文件的md5file

合併後文件的md5(gitbash)file

合併後文件的md5(cmd)

file

通過對先後文件的md5值比價,結果一致,說明咱們的操做沒有問題


小結

當咱們下載或上傳相對較大的文件時,可使用split把大文件拆分紅小文件,而後用cat命令把這些小文件從新拼接成大文件

相關文章
相關標籤/搜索