Você precisará extraí-los em um diretório temporário.
De acordo com unzip (1)
,
For security reasons, unzip normally removes "parent dir" path components ("../") from the names of extracted file. This safety feature (new for version 5.50) prevents unzip from accidentally writing files to "sensitive" areas outside the active extraction folder tree head.
Portanto, embora seja seguro , o 7z
resultante pode ter os arquivos organizados de forma diferente ou até mesmo ausentes se os nomes dos arquivos forem duplicados.
Veja um script de exemplo, mas ele ignora os problemas de ..
e caminho absoluto:
#!/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" .