在 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 模式替换命令去除后缀.tgz
和xyz_
前缀,为每个文件名提取匹配的 Firectory 名称。然后它打印一条命令,确保每个目录都以mkdir p
.最后,它打印一条tar
命令,将每个 .tgz 文件提取到其自己的目录中。
从和行echo
中删除以使其实际运行这些命令。mkdir
tar