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
相关产品推荐
相关产品推荐

