我正在寻找一个灵活的 bash 脚本来执行以下操作:
- 将 .rar、.tar、.tar.gz、.bz2、.7z 档案转换为 .zip 格式
- 将所有文件夹结构和文件名保留为源档案。
- 安静地进行转换,失败时输出“错误”,受密码保护的存档输出“加密”。
提前致谢。
答案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 的脚本,但是已经完成了。