You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux脚本问题:批量解压Zip文件并按规则重命名多文件归档内容

多文件Zip归档的批量解压与重命名解决方案

原脚本仅支持单文件归档,遇到多文件归档时会因文件名被合并成单个参数而报错。以下是修改后的脚本,可完美处理多文件场景:

for z in *.zip; do
    num=0
    # 遍历当前归档内的每个文件
    unzip -Z1 "$z" | while read -r file; do
        # 解压单个文件到当前目录(-n避免覆盖,-j不创建子目录,-B启用备份)
        sudo unzip -njB "$z" "$file"
        # 提取文件扩展名(兼容带多个点的文件名)
        ext="${file##*.}"
        # 递增序号
        num=$((num + 1))
        # 重命名文件为「归档名_序号.扩展名」
        sudo mv -b "$file" "${z%%.*}_${num}.${ext}"
    done
done

关键修改说明

  1. 遍历单个文件:用unzip -Z1 "$z" | while read -r file逐个读取归档内的文件名,避免多文件名被合并成一个参数的问题。
  2. 可靠提取扩展名:使用${file##*.}替代awk,能正确处理包含多个点的文件名(如document.v2.pdf)。
  3. 逐个解压与重命名:对每个文件单独执行解压和重命名操作,确保每个文件都能被正确处理,同时避免解压时的文件覆盖风险。

原脚本问题分析

原脚本中$(unzip -Z1 $z)会将归档内所有文件名以空格分隔合并成一个字符串,导致mv命令试图查找一个包含空格的复合文件名(如TEST123.pdf TEST321.csv),而实际解压后的文件是单独存在的,因此触发cannot stat错误。

内容的提问来源于stack exchange,提问作者user56789

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 15:06:21