Tom*_*Tom 5 zip compression 7z p7zip
如何安全快速地将 zip 存档重新打包为 7zip 存档?
我检查了 7zip 程序的选项,但没有看到任何重新打包的选项。我知道我可以解压缩到目录然后打包这个目录但是它安全吗?如果 ZIP 具有类似“../../file.exe”或“/etc/bin/file.exe”的路径怎么办?
我尝试将文件解压缩到标准输出,虽然程序 7zip 可以做到这一点,但它只输出文件的内容而没有它们的名称等。所以我不能只获取这个输出并重定向到某个地方以打包到 7zip 存档中。
您还可以简单地使用arepackatool 工具套件中的该工具。通常是通过yum install atool或apt-get install atool来安装它。一旦可用,您可以简单地执行以下操作:
$ arepack -e -F 7z *.zip
Run Code Online (Sandbox Code Playgroud)
这会将所有 .zip 文件转换为 .7z 文件。您仍然需要删除 *.zip 文件,但可以像这样简单地完成:
$ rm -f *.zip
Run Code Online (Sandbox Code Playgroud)
Options:
-e, --each execute command above for each file specified
-F, --format=EXT override archive format (see below)
-O, --format-option=OPT give specific options to the archiver
-D, --subdir always create subdirectory when extracting
-f, --force allow overwriting of local files
-q, --quiet decrease verbosity level by one
-v, --verbose increase verbosity level by one
-V, --verbosity=LEVEL specify verbosity (0, 1 or 2)
-p, --page send output through pager
-0, --null filenames from standard in are null-byte separated
-E, --explain explain what is being done by atool
-S, --simulate simulation mode - no filesystem changes are made
-o, --option=KEY=VALUE override a configuration option
--config=FILE load configuration defaults from file
Archive format (for --format) may be specified either as a
file extension ("tar.gz") or as "tar+gzip".
Run Code Online (Sandbox Code Playgroud)
您需要将它们解压缩到临时目录。
根据unzip (1),
出于安全原因,解压缩通常会从提取的文件名称中删除“父目录”路径组件(“../”)。此安全功能(5.50 版的新增功能)可防止 unzip 意外将文件写入活动提取文件夹树头之外的“敏感”区域。
因此,虽然它可能是安全的,但您的结果7z可能会以不同的方式排列文件,或者如果文件名重复,甚至会丢失。
这是一个示例脚本,但它忽略了..绝对路径问题:
#!/bin/sh
set -e
if [ "$1" == "" -o "$2" == "" ]
then
echo Usage: $0 archive.zip archive.7z
exit 1
fi
scratch=`mktemp -d`
trap "rm -rf $scratch" EXIT
in=`readlink -f $1`
out=`readlink -f $2`
if [ -f $out ]
then
echo $out exists.
exit 2
fi
unzip -d"$scratch" "$in"
cd "$scratch"
7z a "$out" .
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2403 次 |
| 最近记录: |