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

