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

Linux环境下如何用循环提取嵌套tgz归档文件?

解决嵌套tgz文件批量提取问题

以下是修正并完善后的bash脚本,实现无硬编码的循环提取所有嵌套tgz文件:

#!/bin/bash

# 定义第一层归档文件名
assignment_tgz="assignment_UA_InleidingProgrammeren_Huistaak1-HelloWorld_2019-11-11.tgz"

# 解压第一层归档
tar -xvf "$assignment_tgz"

# 提取目标目录路径(避免硬编码字节位置,更通用)
src_dir="${assignment_tgz%.tgz}"
base_path="${src_dir#assignment_UA_}"
target_dir="$base_path"

# 创建目标目录并移动所有tgz文件
mkdir -p "$target_dir"
mv "$src_dir"/*.tgz "$target_dir"/
rmdir "$src_dir"

# 循环提取所有嵌套tgz文件,直到无剩余
while true; do
    # 查找当前目录下的第一个tgz文件
    current_tgz=$(find "$target_dir" -type f -name "*.tgz" | head -n 1)
    
    # 没有找到tgz文件则退出循环
    [ -z "$current_tgz" ] && break
    
    # 解压到当前文件所在目录
    echo "正在提取: $current_tgz"
    tar -xvf "$current_tgz" -C "$(dirname "$current_tgz")"
    
    # 可选:删除已解压的tgz文件,防止重复处理
    rm "$current_tgz"
done

关键优化点:

  • 取消硬编码路径提取:用字符串替换${assignment_tgz%.tgz}和${src_dir#assignment_UA_}自动生成目录路径,适配文件名结构变化。
  • 循环逻辑改进:用while true结合find命令持续扫描tgz文件,直到目录中无剩余,自动处理嵌套的归档文件。
  • 路径安全处理:所有路径变量都用双引号包裹,避免空格或特殊字符导致的错误。

内容的提问来源于stack exchange,提问作者Max gépard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:55:25