Назад | Перейти на главную страницу

Bash-скрипт для преобразования архива в формат .zip

Я ищу гибкий сценарий bash, чтобы делать следующее:

  1. Преобразование архивов .rar, .tar, .tar.gz, .bz2, .7z в формат .zip
  2. Сохраните все структуры папок и имена файлов как исходный архив.
  3. Преобразуйте его незаметно, выдает «ошибку» при сбое и выдает «зашифрованный» в защищенном паролем архиве.

Заранее спасибо.

Я думаю, вы захотите использовать 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 и т. Д., Когда архив «зашифрован», и соответствующим образом обновить сообщения об ошибках, чтобы они соответствовали тому, что вам нужно. Но это должно дать вам разумную отправную точку.

Использовать tgz2zip. Это похоже на сценарий ретрейсила, но законченный.