diff --git a/scripts/cleanup_old_files.sh b/scripts/cleanup_old_files.sh new file mode 100644 index 0000000..c86e14d --- /dev/null +++ b/scripts/cleanup_old_files.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash +# +# Delete files older than a defined number of days. +# +# This is a simple and practical maintenance script for temporary folders, +# export directories, application cache folders, and backup staging areas. +# +# Usage: +# bash cleanup_old_files.sh --path /var/tmp/app --days 30 --dry-run +# bash cleanup_old_files.sh --path /var/tmp/app --days 30 --delete +# +# Options: +# --path DIR Directory to scan. +# --days N Delete files older than N days. +# --delete Actually delete files. +# --dry-run Show what would be deleted. This is the default behavior. +# --help Show this help message. + +set -Eeuo pipefail + +target_path="" +days="" +delete_files=false + +usage() { + sed -n '2,18p' "$0" | sed 's/^# \{0,1\}//' +} + +log() { + printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$*" +} + +while [[ "$#" -gt 0 ]]; do + case "$1" in + --path) + target_path="${2:-}" + shift 2 + ;; + --days) + days="${2:-}" + shift 2 + ;; + --delete) + delete_files=true + shift + ;; + --dry-run) + delete_files=false + shift + ;; + --help|-h) + usage + exit 0 + ;; + *) + printf 'ERROR: unknown option: %s\n' "$1" >&2 + usage >&2 + exit 1 + ;; + esac +done + +[[ -d "$target_path" ]] || { printf 'ERROR: directory not found: %s\n' "$target_path" >&2; exit 1; } +[[ "$days" =~ ^[0-9]+$ ]] || { printf 'ERROR: --days must be a positive number.\n' >&2; exit 1; } + +log "Scanning '${target_path}' for files older than ${days} days." + +if [[ "$delete_files" == true ]]; then + log "Delete mode enabled." + find "$target_path" -type f -mtime "+${days}" -print -delete + log "Cleanup finished." +else + log "Dry-run mode enabled. No files will be deleted." + find "$target_path" -type f -mtime "+${days}" -print + log "Dry-run finished." +fi +