#!/bin/sh BACKUP_COUNT_MAX=5 # Backup individual files FILES=" /etc/netctl/eth0-dhcp " # Backup all files from folder FOLDER_FILES=" /etc/netctl " # Backup complete folder (recursively) FOLDERS=" /etc/netctl " # Database credentials USER="username" PASSWORD="password" HOST="127.0.0.1" # Database names DATABASES=" example example2 " # ------------------------------------ # ### Remove / create backup directories ### if [ "$(dirname "$0")" != "." ]; then echo "Please run this script from the directory it resides." exit 1 fi # All directories BACKUP_FILES="$(find . -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | sort -r)" # Current amount of backups BACKUP_COUNT=$(echo "$BACKUP_FILES" | wc -l) # Remove the oldest backup folders if [ "$BACKUP_COUNT" -ge $BACKUP_COUNT_MAX ]; then BACKUPS_OLDEST="$(echo "$BACKUP_FILES" | sed -nE " 1,${BACKUP_COUNT_MAX}d; s/^([0-9]{2}|-|_|:){12}$/\0/p ")" printf "%s\n%s\n" "Removing directories:" "$BACKUPS_OLDEST" rm -rf $BACKUPS_OLDEST fi # Execution location DIR="$(pwd)" # Create new backup folder BACKUP_NAME="$(date +%Y-%m-%d_%H:%M:%S)" mkdir "$DIR/$BACKUP_NAME" ### Start backup procedure ### # Individual files for FILE in $FILES; do mkdir -p "$DIR/$BACKUP_NAME/$(dirname "$FILE")" cp -a "$FILE" "$DIR/$BACKUP_NAME/$FILE" done # All files inside folder for FOLDER_FILE in $FOLDER_FILES; do mkdir -p "$DIR/$BACKUP_NAME/$FOLDER_FILE" # Usind find -> read ensures filename space support find "$FOLDER_FILE" -maxdepth 1 -type f | while read -r FILE; do cp "$FILE" "$DIR/$BACKUP_NAME/$FILE" done done # Complete folder for FOLDER in $FOLDERS; do mkdir -p "$DIR/$BACKUP_NAME/$FOLDER" cp -r "$FOLDER" "$DIR/$BACKUP_NAME/$(dirname "$FOLDER")" done # Set default file permissions umask 177 # MYSQL Dump for DATABASE in $DATABASES; do # mysqldump --user=$USER --protocol=socket -S /var/run/mysqld/mysqld.sock "$DATABASE" \ mysqldump --user=$USER --password=$PASSWORD --host=$HOST "$DATABASE" \ > "$DIR/$BACKUP_NAME/$DATABASE-$BACKUP_NAME.sql" done