如何将多个 tgz 文件提取到包含部分文件名的单独文件夹中?

如何将多个 tgz 文件提取到包含部分文件名的单独文件夹中?

在 linux bash shell 中,我的文件如下列出:

xyz_a.tgz      xyz_b.tgz      xyz_c.tgz

我想将每个文件提取到单独的文件夹中,

a b c

我尝试这样:

$ for file in xyz_*.tgz ;do tar -xzf $file -C $file --strip -component=1;done

然而,它被卡住了。你能帮助我吗?

答案1

$ for file in xyz_*.tgz; do
  dir="${file/.tgz}";
  dir="${dir/xyz_}";
  echo mkdir -p "$dir";
  echo tar -C "$dir" xfz "$file";
done
mkdir -p a
tar -C a xfz xyz_a.tgz
mkdir -p b
tar -C b xfz xyz_b.tgz
mkdir -p c
tar -C c xfz xyz_c.tgz

(为了可读性添加了额外的换行符。我将分号保留在原处,因此可以按原样执行或合并到一行中)

这是实现此目的的一种方法的试运行示例。它使用两个 bash 模式替换命令去除后缀.tgzxyz_前缀,为每个文件名提取匹配的 Firectory 名称。然后它打印一条命令,确保每个目录都以mkdir p.最后,它打印一条tar命令,将每个 .tgz 文件提取到其自己的目录中。

从和行echo中删除以使其实际运行这些命令。mkdirtar

相关内容