场景
与某第三方厂商使用文件接口传递数据。我们是发送方,对方是接收方,对方的接口规范要求对于大于500M文件,必须使用zip格式分卷压缩。
本来在linux下使用zip分卷压缩轻而易举,直接调用系统的zip命令,加上-b参数即可,但恰巧我们的接口机是台IBM小机,AIX系统下的zip不支持分卷功能,需要与split命令结合实现分卷功能。
实现方案
- 先使用zip命令将目录打包成单独的zip文件
- 使用split命令将zip文件拆分
- 对于拆分出来的散乱文件,按格式要求批量重命名
格式要求
生成的文件名格式如下:
yyyymmdd_zzzz_RetentionPhotosSync_iiii_xxxx.zip
其中yyyymmdd为时间,xxxx为分卷序列号
分卷压缩脚本
下面以名为testfolder
的目录为例,以5M大小,进行分卷
使用zip命令,将整个目录压缩成.zip(对于目录需要使用-r参数)
zip -r tmpfile.zip testfolder
使用split命令,以5M为单位,将.zip进行拆分,生成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系统,可以用如下方式解压缩
使用cat命令合并文件
cat yyyymmdd_zzzz_RetentionPhotosSync_iiii_*.zip > yyyymmdd_zzzz_RetentionPhotosSync_iiii.zip
使用unzip命令解压
unzip yyyymmdd_zzzz_RetentionPhotosSync_iiii.zip