#!/bin/bash # Default configuration. LOGS_DIR="/var/log" DIR_MODE="0750" UMASK="027" # This array may be used in the defaults file. declare -A CREATE_DIRS # Allow /etc/default/rotate-logs-symlinks to override default configuration. [[ -e /etc/default/rotate-logs-symlinks ]] && { # shellcheck disable=SC1091 source /etc/default/rotate-logs-symlinks || { printf "%s: %s\\n" "${0##*/}" "failed reading /etc/default/rotate-logs-symlinks" >&2 exit 1 } } # Process the directories in the logs directory. [[ -d "$LOGS_DIR" ]] && { TODAY="$(printf "%(%Y/%m/%d)T")" umask "$UMASK" # Process all the directories in the logs directory. for DIR in "$LOGS_DIR"/*/; do cd "$DIR" 2>/dev/null || { printf "%s: %s\\n" "${0##*/}" "failed to change directory to '$DIR'" >&2 continue } # Create a new logs directory for today. # shellcheck disable=SC2174 mkdir -p -m "$DIR_MODE" "$TODAY" 2>/dev/null || { printf "%s: %s\\n" "${0##*/}" "failed to create directory '$DIR/$TODAY'" >&2 continue } # If configured to do so for this directory, create sub directories. for CREATE_DIR in ${CREATE_DIRS[$(printf "$DIR" | awk -F / -e '{print $4}')]}; do mkdir -p -m "$DIR_MODE" "$TODAY/$CREATE_DIR" 2>/dev/null || { printf "%s: %s\\n" "${0##*/}" "failed to create directory '$DIR/$TODAY/$CREATE_DIR'" >&2 continue } done # Create a 'today' symlink to the new days' directory. ( cd "$DIR" 2>/dev/null && ln -sfn "$TODAY" "today" 2>/dev/null ) || { printf "%s: %s\\n" "${0##*/}" "updating 'today' symlink failed" >&2 continue } done } exit 0