BlueXIII's Blog

热爱技术,持续学习

0%

AIX下使用zip+split实现分卷压缩

场景

与某第三方厂商使用文件接口传递数据。我们是发送方,对方是接收方,对方的接口规范要求对于大于500M文件,必须使用zip格式分卷压缩。
本来在linux下使用zip分卷压缩轻而易举,直接调用系统的zip命令,加上-b参数即可,但恰巧我们的接口机是台IBM小机,AIX系统下的zip不支持分卷功能,需要与split命令结合实现分卷功能。

实现方案

  1. 先使用zip命令将目录打包成单独的zip文件
  2. 使用split命令将zip文件拆分
  3. 对于拆分出来的散乱文件,按格式要求批量重命名

格式要求

生成的文件名格式如下:
yyyymmdd_zzzz_RetentionPhotosSync_iiii_xxxx.zip
其中yyyymmdd为时间,xxxx为分卷序列号

分卷压缩脚本

下面以名为testfolder的目录为例,以5M大小,进行分卷

使用zip命令,将整个目录压缩成.zip(对于目录需要使用-r参数)

1
zip -r tmpfile.zip testfolder

使用split命令,以5M为单位,将.zip进行拆分,生成xaa、xab、xac…(以此类推)等多个文件

1
split -b 5m tmpfile.zip splitfile-

对于生成的xaa、xab、xac…散乱文件,按格式重命名

1
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

清理临时文件

1
rm tmpfile.zip

分卷解压脚本

如果对端恰巧也是AIX系统,可以用如下方式解压缩

使用cat命令合并文件

1
cat yyyymmdd_zzzz_RetentionPhotosSync_iiii_*.zip > yyyymmdd_zzzz_RetentionPhotosSync_iiii.zip

使用unzip命令解压

1
unzip yyyymmdd_zzzz_RetentionPhotosSync_iiii.zip