47 lines
1.2 KiB
Bash
Executable File
47 lines
1.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
INPUT_DIR="${1:-.}"
|
|
OUTPUT_DIR="${2:-.}"
|
|
|
|
if [ -z "$1" ]; then
|
|
echo "Usage: $0 <input_dir> [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
|