Для архивации используется tar. Она объединяет несколько небольших файлов в один, с целью более удобной последующей передачи, хранения, шифрования. 3
Для сжатия используются другие утилиты, в зависимости от алгоритма сжатия: zip, bz, xz, lzma и т. д.
пример
TEMP_ARCHIVE="/tmp/$(basename "$OUTPUT_ARCHIVE").tar"
LOG_FILE="./archive_script.log"
# Создание tar-архива
tar -cvf "$TEMP_ARCHIVE" "${INPUT_FILES[@]}"
if [ $? -ne 0 ]; then
echo "Failed to create tar archive"
exit 1
fi
# Сжатие архива
START_TIME=$(date +%s)
if [ "$COMPRESSION_METHOD" == "gzip" ]; then
gzip -c "$TEMP_ARCHIVE" > "$OUTPUT_ARCHIVE"
elif [ "$COMPRESSION_METHOD" == "bzip2" ]; then
bzip2 -c "$TEMP_ARCHIVE" > "$OUTPUT_ARCHIVE"
fi
END_TIME=$(date +%s)
# Проверка успешности сжатия
if [ $? -ne 0 ]; then
echo "Failed to compress archive"
rm "$TEMP_ARCHIVE"
exit 1
fi
# Удаление временного архива
rm "$TEMP_ARCHIVE"
# Получение размеров файлов
ORIGINAL_SIZE=$(du -sb "${INPUT_FILES[@]}" | awk '{total += $1} END {print total}')
COMPRESSED_SIZE=$(du -sb "$OUTPUT_ARCHIVE" | cut -f1)
# Логирование информации
{
echo "[$(date +"%Y-%m-%d %H:%M:%S")] Created archive '$OUTPUT_ARCHIVE' using '$COMPRESSION_METHOD'"
echo "Original size: $ORIGINAL_SIZE bytes"
echo "Compressed size: $COMPRESSED_SIZE bytes"
echo "Compression time: $(($END_TIME - $START_TIME)) seconds"
} >> "$LOG_FILE"
# Успешное завершение
echo "Archive '$OUTPUT_ARCHIVE' created successfully."
exit 0