有兩種方式,
第一種使用dd命令
第二種使用split
dd命令是linux下一個非常有用的磁盤命令。它可以將指定大小的塊拷貝成一個文件,並在拷貝的同時執行指定的轉換。
UNIX已經提供了文件切割功能,能完成這個功能的UNIX命令就是DD。
要切割的大文件為DGJD,共98336321字節,則:
dd if=dgjd of=zz1 bs=1 count=20000000
dd if=dgjd of=zz2 bs=1 count=20000000 skip=20000000
dd if=dgjd of=zz3 bs=1 count=20000000 skip=40000000
dd if=dgjd of=zz4 bs=1 count=20000000 skip=60000000
dd if=dgjd of=zz5 bs=1 count=18336321 skip=80000000
其中IF(INPUT FILENAME)是要切割的大文件名,OF(OUTPUT FILENAME)是切割后的子文件名,BS是指明以多少字節作為一個切割記錄單位,COUNT是要切割的單位記錄數,SKIP是說明切割時的起點,單位同樣以BS設定值為准。通過上述五條指令就將DGJD大文件切割成為4個2千萬字節、1個18336321字節的子文件。要注意的是SKIP的值不能錯。 由此
也不難看出,DD切割是“非損耗”式的切割,並且支持從任意位置開始的任意大小的切割。
要將生成的ZZ1、ZZ2、ZZ3、ZZ4四個子文件組裝為XDGJD,則:
dd if=zz1 of=xdgjd bs=1 count=20000000
dd if=zz2 of=xdgjd bs=1 count=20000000 seek=20000000
dd if=zz3 of=xdgjd bs=1 count=20000000 seek=40000000
dd if=zz4 of=xdgjd bs=1 count=20000000 seek=60000000
dd if=zz5 of=xdgjd bs=1 count=18336321 seek=80000000
其中SKIP參數改為SEEK參數,指明組裝的新大文件XDGJD每次的開始位置是從文件頭開始多少字節。如果缺省,則組裝從文件頭開始,顯然這不是我們每次都希望的, 所以需用SEEK參數明確指出開始位置。通過以上5個指令,即可將5個子文件重新組裝為一個大文件。將切割后生成的子文件重新用FTP傳送,結果有的能夠順利傳送, 有的仍然導致網絡癱瘓,不怕,繼續切割,切成每個一千萬字節,再傳,OK!成功傳送!
一、關於
在linux下,切割和合並文件可以使用split和cat命令來實現。
二、文件切割
文件切割模式分為兩種:文本文件和二進制模式。
1、文本模式
文本模式只適用於文本文件,用這種模式切割后的每個文件都是可讀的。文本模式又分為兩種:按最大文件大小切割和按文本行數切割。
1)按文件大小切割
split -C 50k log.log splog
將文本文件log.log按每塊最大50k的大小進行切割,不打碎行。輸出文件名類似splogaa, splogab……
2)按文本行數切割
split -l 100 log.log splog
每個分塊100行,不考慮大小。日志分析時應該有用。
2、二進制模式
split -b 50k log.log splog
每個分塊(當然,最后一個不保證)大小都是50k,基本不可讀。任何類型文件都可以用這種切割模式。
三、文件合並
不管用什么方式切割,合並方法不變。
cat splog* >newLog.log
四、補充說明
split 參數:
-a:指定輸出文件名的后綴長度,默認為2個(aa,ab...)
-d:指定輸出文件名的后綴用數字代替
-b:指定輸出文件的最大字節數,如1k,1m...
-C:指定每一個輸出文件中單行的最大字節數
-l:指定每一個輸出文件的最大行數
從0開始,以ss為前綴,每個分割大小1kb
split -b 1k -d a.log ss
