#!/bin/bash INPUT_DIR="${1:-.}" OUTPUT_DIR="${2:-.}" if [ -z "$1" ]; then echo "Usage: $0 [output_dir]" echo "Concatenates all .tar.gz parts and extracts them" exit 1 fi PREFIX="" for f in "${INPUT_DIR}"/**.tar.gz; do if [ -f "$f" ]; then BASE=$(basename "$f") # Убираем числовой суффикс для определения префикса PREFIX=$(echo "$BASE" | sed -E 's/\.[0-9]+$//') if [ -n "$PREFIX" ]; then break fi fi done COMBINED="/tmp/${PREFIX}_combined.tar.gz" echo "Combining parts into ${COMBINED}..." # Собираем в правильном порядке: сначала базовый файл (без суффикса), затем части по порядку cat "${INPUT_DIR}/${PREFIX}" > "$COMBINED" 2>/dev/null for f in $(ls -v "${INPUT_DIR}/${PREFIX}".* 2>/dev/null); do BASE=$(basename "$f") if [[ "$BASE" =~ \.[0-9]+$ ]]; then echo "Appending ${BASE}..." cat "$f" >> "$COMBINED" fi done echo "Extracting ${COMBINED} to ${OUTPUT_DIR}..." tar -xzf "$COMBINED" -C "$OUTPUT_DIR" if [ $? -eq 0 ]; then echo "Extraction complete." rm -f "$COMBINED" else echo "Extraction failed. Combined file kept at ${COMBINED}" exit 1 fi