場(chǎng)景
與某第三方廠商使用文件接口傳遞數(shù)據(jù)。我們是發(fā)送方审姓,對(duì)方是接收方珍特,對(duì)方的接口規(guī)范要求對(duì)于大于500M文件,必須使用zip格式分卷壓縮魔吐。
本來(lái)在linux下使用zip分卷壓縮輕而易舉扎筒,直接調(diào)用系統(tǒng)的zip命令,加上-b參數(shù)即可酬姆,但恰巧我們的接口機(jī)是臺(tái)IBM小機(jī)嗜桌,AIX系統(tǒng)下的zip不支持分卷功能,需要與split命令結(jié)合實(shí)現(xiàn)分卷功能辞色。
實(shí)現(xiàn)方案
- 先使用zip命令將目錄打包成單獨(dú)的zip文件
- 使用split命令將zip文件拆分
- 對(duì)于拆分出來(lái)的散亂文件骨宠,按格式要求批量重命名
格式要求
生成的文件名格式如下:
yyyymmdd_zzzz_RetentionPhotosSync_iiii_xxxx.zip
其中yyyymmdd為時(shí)間,xxxx為分卷序列號(hào)
分卷壓縮腳本
下面以名為testfolder
的目錄為例相满,以5M大小层亿,進(jìn)行分卷
使用zip命令,將整個(gè)目錄壓縮成.zip(對(duì)于目錄需要使用-r參數(shù))
zip -r tmpfile.zip testfolder
使用split命令立美,以5M為單位匿又,將.zip進(jìn)行拆分,生成xaa悯辙、xab琳省、xac...(以此類推)等多個(gè)文件
split -b 5m tmpfile.zip splitfile-
對(duì)于生成的xaa迎吵、xab、xac...散亂文件针贬,按格式重命名
nowdate=`date +%Y%m%d`;n=0; for filename in `ls splitfile* `; do n=`expr ${n} + 1`; suffix=`printf %04d ${n}`; mv ${filename} ${nowdate}_zzzz_RetentionPhotosSync_iiii_${suffix}.zip ; done
清理臨時(shí)文件
rm tmpfile.zip
分卷解壓腳本
如果對(duì)端恰巧也是AIX系統(tǒng)击费,可以用如下方式解壓縮
使用cat命令合并文件
cat yyyymmdd_zzzz_RetentionPhotosSync_iiii_*.zip > yyyymmdd_zzzz_RetentionPhotosSync_iiii.zip
使用unzip命令解壓
unzip yyyymmdd_zzzz_RetentionPhotosSync_iiii.zip