将存档转换为 .zip 格式的 Bash 脚本

将存档转换为 .zip 格式的 Bash 脚本

我正在寻找一个灵活的 bash 脚本来执行以下操作:

  1. 将 .rar、.tar、.tar.gz、.bz2、.7z 档案转换为 .zip 格式
  2. 将所有文件夹结构和文件名保留为源档案。
  3. 安静地进行转换,失败时输出“错误”,受密码保护的存档输出“加密”。

提前致谢。

答案1

我认为您需要使用case语句来选择如何根据文件名解压输入档案(或者可能使用file基于内容的解压方式)。将输入档案解压到临时目录,将 stdout/stdin 传输到 /dev/null 或文件。然后zip对临时目录的内容运行,保存到命令行提供的文件名。删除临时目录。

类似这样的(未经测试):

infile="$1"
outfile="$2"
# Add syntax checking here
tempdir=`mktemp -d`
case "$infile" in
    *.tar.gz)
        tar -C "$tempdir" -xzf "$infile" 2>/dev/null
        ;;
    *.tar)
        tar -C "$tempdir" -xf "$infile" 2>/dev/null
        ;;
... # Add handling for other input formats here
    *)
        echo "Unrecognized input format" >&2
        false
        ;;
esac
if [ $? -ne 0 ]; then
    echo "Error processing input file $infile" >&2 # or just echo "error"
    rm -rf "$tempdir"
    exit 1
fi
(cd "$tempdir" && zip "$outfile" .)
rm -rf "$tempdir"

您需要确定存档“加密”时 tar 等程序会给出哪些错误,并根据您所期望的内容适当更新错误消息。但这应该会给您一个合理的起点。

答案2

使用压缩包. 类似于 retracile 的脚本,但是已经完成了。

相关内容