Files
bash/scripts/cleanup_old_files.sh
T

78 lines
1.8 KiB
Bash

#!/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