Solaris环境下筛选Zip待删文件列表并重构压缩包的技术咨询
SunOS 5.11非全局区域下Zip包文件筛选与重构完整方案
已完成的第一步:生成初始待删除列表
已通过以下命令筛选出包含deployfiles且不区分大小写排除DEV的文件,保存到待删除列表:
unzip -l -q /tmp/package-391.zip | awk '{ print $4 }' | sed -n '3,$p' | grep -v '^$' | grep deployfiles | grep -v -i DEV > /tmp/to_delete.txt
生成的待删除文件:
myapp-configuration/src/config/perf/deployfiles/acid.properties myapp-configuration/src/config/prod/deployfiles/acid.properties myapp-configuration/src/config/qa/deployfiles/acid.properties myapp-configuration/src/config/uat/deployfiles/acid.properties
第二步:提取重复文件名的路径并追加到待删除列表
剩余文件中bras.war出现两次,需删除非保留的myapp-configuration/src/config/dev/bras.war,执行以下命令完成筛选:
# 1. 获取Zip包内所有文件列表 unzip -l -q /tmp/package-391.zip | awk '{ print $4 }' | sed -n '3,$p' | grep -v '^$' > /tmp/all_files.txt # 2. 找出重复出现的文件名 awk -F/ '{print $NF}' /tmp/all_files.txt | sort | uniq -d > /tmp/duplicate_filenames.txt # 3. 筛选出重复文件名对应的路径,排除需要保留的myapp/src/stage/bras.war,追加到待删除列表 grep -f /tmp/duplicate_filenames.txt /tmp/all_files.txt | grep -v 'myapp/src/stage/bras.war' >> /tmp/to_delete.txt
第三步:重构目标Zip包
提供两种方式完成重构,按需选择:
方式一:直接删除Zip包内待删除文件(高效)
先备份原包,再使用zip -d命令删除指定文件:
# 备份原压缩包 cp /tmp/package-391.zip /tmp/package-391_backup.zip # 删除待删除列表中的文件 zip -d /tmp/package-391.zip $(cat /tmp/to_delete.txt)
方式二:提取保留文件重新打包(更稳妥)
如果担心删除操作出错,可先提取需要保留的文件,再重新打包:
# 创建临时目录用于提取文件 mkdir -p /tmp/tmp_extract # 提取需要保留的两个文件 unzip -q /tmp/package-391.zip "myapp/src/stage/bras.war" "myapp-configuration/src/config/dev/deployfiles/acid.properties" -d /tmp/tmp_extract # 重新打包成目标Zip包 cd /tmp/tmp_extract zip -r /tmp/package-391_final.zip . cd /tmp # 清理临时文件 rm -rf /tmp/tmp_extract /tmp/to_delete.txt /tmp/all_files.txt /tmp/duplicate_filenames.txt
最终得到的Zip包仅包含myapp/src/stage/bras.war和myapp-configuration/src/config/dev/deployfiles/acid.properties两个文件。
内容的提问来源于stack exchange,提问作者Ashar
相关产品推荐
相关产品推荐

