場景
與某第三方廠商使用文件接口傳遞數(shù)據(jù)。我們是發(fā)送方,對方是接收方,對方的接口規(guī)范要求對于大于500M文件,必須使用zip格式分卷壓縮。
本來在linux下使用zip分卷壓縮輕而易舉,直接調(diào)用系統(tǒng)的zip命令,加上-b參數(shù)即可,但恰巧我們的接口機(jī)是臺IBM小機(jī),AIX系統(tǒng)下的zip不支持分卷功能,需要與split命令結(jié)合實(shí)現(xiàn)分卷功能。
實(shí)現(xiàn)方案
- 先使用zip命令將目錄打包成單獨(dú)的zip文件
- 使用split命令將zip文件拆分
- 對于拆分出來的散亂文件,按格式要求批量重命名
格式要求
生成的文件名格式如下:
yyyymmdd_zzzz_RetentionPhotosSync_iiii_xxxx.zip
其中yyyymmdd為時間,xxxx為分卷序列號
分卷壓縮腳本
下面以名為testfolder
的目錄為例,以5M大小,進(jìn)行分卷
使用zip命令,將整個目錄壓縮成.zip(對于目錄需要使用-r參數(shù))
zip -r tmpfile.zip testfolder
使用split命令,以5M為單位,將.zip進(jìn)行拆分,生成xaa、xab、xac...(以此類推)等多個文件
split -b 5m tmpfile.zip splitfile-
對于生成的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
清理臨時文件
rm tmpfile.zip
分卷解壓腳本
如果對端恰巧也是AIX系統(tǒng),可以用如下方式解壓縮
使用cat命令合并文件
cat yyyymmdd_zzzz_RetentionPhotosSync_iiii_*.zip > yyyymmdd_zzzz_RetentionPhotosSync_iiii.zip
使用unzip命令解壓
unzip yyyymmdd_zzzz_RetentionPhotosSync_iiii.zip