如何编写bash脚本,批量解压zip前删除对应目标文件夹内容
批量更新脚本
以下脚本可直接满足你的需求,自动识别每个zip内部的主文件夹名称,先删除旧文件夹再解压,不会残留旧文件:
#!/bin/bash # 遍历当前目录下所有zip文件 for zip_file in *.zip; do # 无zip文件时跳过,避免报错 [ -f "$zip_file" ] || continue # 提取zip内部的主文件夹名称 target_dir=$(unzip -l "$zip_file" | awk 'NR>3 {sub(/\/.*/, "", $4); print $4; exit}') # 目录名校验,防止异常zip导致误删 if [ -n "$target_dir" ] && [ "$target_dir" != "." ] && [ "$target_dir" != "/" ]; then # 删除旧版本文件夹 rm -rf "$target_dir" # 解压新版本 unzip -o "$zip_file" fi done # 删除所有处理完成的zip包 rm -f *.zip
说明
- 脚本会自动处理当前目录下所有zip文件,不需要提前配置文件夹名称,支持一次上传大量zip包的更新场景
- 运行前建议先做测试:将
rm -rf "$target_dir"替换为echo "待删除目录: $target_dir",执行脚本确认输出的目录名称正确后,再换回删除命令即可 - 适配你提到的「每个zip仅包含单个主文件夹、无其他根级文件」的规则,不会出现识别错误
内容的提问来源于stack exchange,提问作者Konrad Bartczak
相关产品推荐
相关产品推荐

