5分鐘學linux命令之split
情景介紹
平時工作中,我習慣使用rz從本地上傳檔案到伺服器,sz從伺服器下載檔案到本地,但對傳輸檔案大小有限制,例如排查線上jvm的問題,需要生成了dump檔案,可能有10G大,超過了限制,怎麼下載呢?
拆分檔案命令之split
語法
split [-<行數>][-l<行數>][-b<位元組>][-C<位元組>][要切割的檔案][輸出檔名的字首][-a<字尾長度>]
-<行數>或-l<行數>:指定每多少行切成一個小檔案
-b<位元組>:指定每多少位元組切成一個小檔案,這裡也可以指定K、M、G等單位
-C<位元組>:與-b<位元組>類似,但在切割時會盡量維持每行的完整性
輸出檔名的字首:設定拆分後文件的名稱字首,split會自動在字首後面加上編號,預設從aa開始
-a<字尾長度>:預設字尾長度是2,即按 aa,ab,ac的順序排序
<br>
split命令和cat命令可以完成上面的難題,排查線上問題的現場已經沒有了,所以為了演示,用dd命令(對dd命令不瞭解的也可以學下,因為這次重點介紹split,所以dd暫且不介紹)建立一個400MB的檔案,檔名是adsearch.hprof,這裡假設400MB的大小就超過了伺服器的下載限制
dd if=/dev/zero bs=1024 count=409600 of=adsearch.hprof
如圖所示,建立了一個400MB的檔案
<br>
那我把adsearch.hprof檔案按100MB大小拆分,可以拆分成4個檔案
split -b 100M adsearch.hprof
可以看到在執行完split命令後,目錄下生成了四個相同大小 xaa、xab、xac、xad四個100MB的小檔案。因為我們沒有指定字首,就採用了預設的字首x,後面跟著aa、ab、ac、ad。我們也可以指定字首,比如我把剛剛生成的四個小檔案刪掉,用下面的命令重新切分下
split -b 100M adsearch.hprof adsearch-
<br>
合併檔案之cat
把大檔案切分後,我們就可以把小檔案下載到本地,然後把他們再拼接起來
// 用萬用字元的形式,要保證該目錄下沒有其他以adsearch-a為字首的檔案
cat adsearch-a* > adsearch.hprof
// 或者指定檔案進行拼接
cat adsearch-aa adsearch-ab adsearch-ac adsearch-ad > adsearch.hprof
<br> **備註**
上面的操作我是在win本上的gitbash操作的,有cat命令
<br>
那如果沒有安裝gitbash只有cmd呢?
可以使用copy /b 命令來拼接,其中 /b 代表指定以二進位制格式進行復制
copy /b adsearch-aa + adsearch-ab + adsearch-ac + adsearch-ad adsearch.hprof
<br> #### 校驗
經過拆分-合併後,兩個檔案一樣嗎?這是我們主要關心的問題,我們對檔案做一個md5,看結果是否相等,就可以判斷檔案是否一樣了
原始檔案的md5
合併後文件的md5(gitbash)
合併後文件的md5(cmd)
經過對前後文件的md5值比價,結果一致,說明我們的操作沒有問題
<br> #### 小結
當我們下載或上傳相對較大的檔案時,可以使用split把大檔案拆分成小檔案,然後用cat命令把這些小檔案重新拼接成