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

我正在寻找一个灵活的bash脚本来做到以下几点:

  1. 将.rar,.tar,.tar.gz,.bz2,.7z文件转换为.zip格式
  2. 保留所有文件夹结构和文件名作为源档案。
  3. 静静地转换,输出失败时输出“error”,输出密码保护的“encrypted”。

提前致谢。

我想你会想使用case语句来select如何根据文件名解压input档案(或者使用file来代替它的内容)。 将input档案解包到一个临时目录,将stdout / stdinpipe道输出到/ dev / null或一个文件。 然后在临时目录的内容上运行zip ,保存到命令行提供的文件名。 删除临时目录。

像这样(未testing):

 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" 

当存档被“encryption”时,您需要确定从tar等得到的错误,并且适当地更新错误消息以符合您的要求。 但这应该给你一个合理的出发点。

使用tgz2zip 。 这就像收缩的脚本,但完成了。