bash脚本将ZIP文件转换为tar.gz(或tar.bz2)时出错

编程语言 2026-07-12

我把下面的Bash脚本保存为一个 zip2tar 可执行文件。

#!/bin/bash

if [ "$1" = "j" ]; then
  unzip -p $2.zip | tar -jcvf $2.tar.bz2 --files-from=-
else
  unzip -p $2.zip | tar -zcvf $2.tar.gz --files-from=-
fi

我把下面这个ZIP文件下载下来:https://github.com/fernandotcl/pa-applet。随后运行:

./zip2tar x pa-applet-master

在脚本的 tar 部分,我遇到了一连串错误,基本都是提示:未找到文件。有没有办法用简单的 bash 脚本来实现?

先感谢你的帮助!

解决方案

试试这个脚本(命名为zip-to-tar,在Ubuntu上测试通过):

#!/bin/bash
if test "${2##*.}" = gz; then
    flag=z
elif test "${2##*.}" = bz2; then
    flag=j
else
    echo "Unknow extension in filename [$2]."
    exit
fi
dir=$(mktemp -d) file=$(realpath $2)
unzip "$1" -d "$dir" && tar ${flag}cvf "$file" -C "$dir" .
rm -rf "$dir"
# example : zip-to-tar test.zip /tmp/test.tar.gz
# example : zip-to-tar test.zip /tmp/test.tar.bz2
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章