Initial Commit
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Script directory and backups directory setup
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
BACKUP_DIR="${SCRIPT_DIR}/backups"
|
||||
mkdir -p "${BACKUP_DIR}"
|
||||
|
||||
# Timestamp for archive name
|
||||
TIMESTAMP="$(date +"%Y%m%d_%H%M%S")"
|
||||
ZIP_FILENAME="konsole_backup_${TIMESTAMP}.zip"
|
||||
ZIP_FILEPATH="${BACKUP_DIR}/${ZIP_FILENAME}"
|
||||
|
||||
# Temporary staging directory
|
||||
TEMP_DIR="$(mktemp -d)"
|
||||
trap 'rm -rf "${TEMP_DIR}"' EXIT
|
||||
|
||||
echo "=== Starting Konsole Configuration Backup ==="
|
||||
|
||||
# Define target paths relative to HOME
|
||||
CONFIG_PATHS=(
|
||||
".config/konsolerc"
|
||||
".local/share/konsole"
|
||||
".local/share/kxmlgui5/konsole"
|
||||
".config/konsole.notifyrc"
|
||||
".config/konsolesshconfig"
|
||||
)
|
||||
|
||||
COPIED_COUNT=0
|
||||
|
||||
for rel_path in "${CONFIG_PATHS[@]}"; do
|
||||
src_path="${HOME}/${rel_path}"
|
||||
dest_path="${TEMP_DIR}/${rel_path}"
|
||||
|
||||
if [ -e "${src_path}" ]; then
|
||||
mkdir -p "$(dirname "${dest_path}")"
|
||||
cp -a "${src_path}" "${dest_path}"
|
||||
echo " [+] Staged: ~/${rel_path}"
|
||||
COPIED_COUNT=$((COPIED_COUNT + 1))
|
||||
else
|
||||
echo " [-] Skipped (not found): ~/${rel_path}"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "${COPIED_COUNT}" -eq 0 ]; then
|
||||
echo "Error: No Konsole configuration files found to backup."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create zip file from staging area
|
||||
echo "Creating backup archive: ${ZIP_FILENAME}..."
|
||||
(
|
||||
cd "${TEMP_DIR}"
|
||||
zip -q -r "${ZIP_FILEPATH}" .
|
||||
)
|
||||
|
||||
echo "Backup successfully saved to: ${ZIP_FILEPATH}"
|
||||
|
||||
# Retention Policy: keep at most 10 recent backup zip files
|
||||
MAX_BACKUPS=10
|
||||
|
||||
mapfile -t BACKUP_FILES < <(find "${BACKUP_DIR}" -maxdepth 1 -name "konsole_backup_*.zip" | sort -r)
|
||||
|
||||
TOTAL_BACKUPS="${#BACKUP_FILES[@]}"
|
||||
if [ "${TOTAL_BACKUPS}" -gt "${MAX_BACKUPS}" ]; then
|
||||
echo "Cleaning up older backups (keeping top ${MAX_BACKUPS})..."
|
||||
for (( i=MAX_BACKUPS; i<TOTAL_BACKUPS; i++ )); do
|
||||
file_to_remove="${BACKUP_FILES[$i]}"
|
||||
echo " Deleting old backup: $(basename "${file_to_remove}")"
|
||||
rm -f "${file_to_remove}"
|
||||
done
|
||||
fi
|
||||
|
||||
echo "=== Backup Complete (${TOTAL_BACKUPS} backup(s) currently stored) ==="
|
||||
Reference in New Issue
Block a user