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

Solaris11下批量解压子目录tar包并保留文件至原目录

批量解压子目录中的tar包(Solaris 11环境)

你之前的命令报错原因很明确:

  • 第一个命令for file in *遍历的是顶层目录下的所有子目录(sub1、sub2等),直接用gtar解压目录当然会提示不是tar归档文件。
  • 第二个命令for file in *.tar在顶层目录找不到任何tar文件,因为所有tar包都在子目录里,所以同样报错。

以下两种方法可以实现需求:

方法1:切换到子目录执行解压

for dir in *; do
    # 只处理目录,避免误操作其他文件
    if [ -d "$dir" ]; then
        cd "$dir" && gtar -xf tarfile1.tar --strip-components 2 && cd ../
    fi
done

这个循环会遍历顶层目录下的所有子目录,进入每个子目录后执行你原本有效的解压命令,完成后回到顶层目录继续处理下一个。

方法2:使用gtar的-C参数指定目标目录

不用切换目录,直接通过-C参数指定解压后文件的存放路径:

for dir in *; do
    if [ -d "$dir" ]; then
        gtar -xf "$dir/tarfile1.tar" -C "$dir" --strip-components 2
    fi
done

-C "$dir"会让gtar把解压后的文件直接放到对应的子目录里,无需切换工作目录。

如果你的子目录都是以sub开头,也可以把循环里的*换成sub*,缩小遍历范围,提高效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:37:12