Как я могу переупаковать zip в 7zip?

Как я могу безопасно и быстро переупаковать zip-архив в архив 7zip?

Я проверил параметры программы 7zip, но я не вижу возможности переупаковки. Я знаю, что могу извлечь в каталог, а затем упаковать этот каталог, но он безопасен? Что делать, если ZIP имеет такие пути, как «../../file.exe» или «/etc/bin/file.exe»?

Я пробовал распаковывать файлы в stdout, и, хотя программа 7zip может это делать, она выводит только содержимое файлов без их имен и т. Д., Поэтому я не могу просто захватить этот вывод и перенаправить куда-нибудь, чтобы упаковать в архив 7zip.

  • У вас возникли проблемы с распаковкой нескольких файлов
  • Подкаталоги Zip на основе find, -exec
  • Восстановить содержимое файла Firefox .part?
  • Как я могу перечислить все * .doc файлы в Zip-архиве, включая файлы в подкаталогах?
  • Прокрутите только архив данных .zip только для чтения, чтобы извлечь строку из файла .kml в
  • Добавить файл на другой путь в zip-файле
  • Закрепить файл как подкоманду
  • zip все файлы и подпапка в каталоге без родительского каталога
  • One Solution collect form web for “Как я могу переупаковать zip в 7zip?”

    Вам нужно будет извлечь их во временный каталог.

    Согласно unzip (1) ,

    Из соображений безопасности распаковка обычно удаляет компоненты пути «родительский dir» («../») из имен извлеченного файла. Эта функция безопасности (новая для версии 5.50) предотвращает несанкционированное извлечение файлов в «чувствительные» области вне активной ветви дерева папки извлечения.

    Поэтому, хотя это, скорее всего, безопасно , ваш результат 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" . 
    Linux и Unix - лучшая ОС в мире.