#!/bin/bash set -euo pipefail # Папки, в которых ищем архивы folders=(1 2 3 4 5 6) for folder in "${folders[@]}"; do # Проверяем, существует ли папка if [ ! -d "$folder" ]; then echo "Папка $folder не найдена, пропускаем." continue fi echo "Обрабатываем папку: $folder" # --- ЭТАП 1: ZIP → временная папка → tar.gz → удаление ZIP --- shopt -s nullglob for zip_file in "$folder"/*.zip; do if [ ! -f "$zip_file" ]; then continue fi base_name="${zip_file%.zip}" # Имя tar.gz: папка/имя_без_zip.tar.gz tar_file="${base_name}.tar.gz" echo "Обрабатываю ZIP: $zip_file → $tar_file" # Создаём временную папку temp_dir="$(mktemp -d)" || { echo "ERROR: не удалось создать временную папку" >&2; continue; } # Распаковываем ZIP во временную папку if ! unzip -q -o -d "$temp_dir" "$zip_file"; then echo "ERROR: не удалось распаковать $zip_file (архив не удалён)" >&2 rm -rf "$temp_dir" continue fi # Упаковываем содержимое временной папки в tar.gz в той же директории, что и исходный ZIP if tar -czf "$tar_file" -C "$temp_dir" .; then echo "OK: создан $tar_file" # Удаляем исходный ZIP rm "$zip_file" echo "OK: удалён $zip_file" else echo "ERROR: не удалось создать $tar_file (ZIP не удалён)" >&2 rm -rf "$temp_dir" continue fi # Чистим временную папку rm -rf "$temp_dir" done shopt -u nullglob # --- ЭТАП 2: Распаковка всех tar.gz (включая только что созданные) и удаление архивов --- shopt -s nullglob for tar_file in "$folder"/*.tar.gz "$folder"/*.tgz "$folder"/*.tar; do # Нормализуем имя: если это .tar без gzip, используем tar без -z if [[ "$tar_file" == *.tar.gz || "$tar_file" == *.tgz ]]; then extract_opts="-xzf" else extract_opts="-xf" fi if [ ! -f "$tar_file" ]; then continue fi echo "Распаковываю: $tar_file" if tar $extract_opts "$tar_file" -C "$folder"; then echo "OK: распакован $tar_file" # Удаляем архив после успешной распаковки rm "$tar_file" echo "OK: удалён $tar_file" else echo "ERROR: не удалось распаковать $tar_file" >&2 fi done shopt -u nullglob done echo "Готово!"