#!/bin/bash --posix set -e DIRECTORY="" HOUR=12 DAYS_OLD=3 usage() { printf "%s\n" "Usage: Autodelete-Files -d --directory | -d Example: --directory ~/trash/ --hour | -h Example: --hour 5 Default: 12 --days-old 0> | -o 0> Example: --days-old 3 Default: 3" } error() { printf "\n%s\n" "$1" >&2 exit 1 } confirmation() { while true; do read -p "${1}" -n 1 -r choice case "$choice" in y|Y ) return 1;; n|N ) return 0;; * ) echo -e "\nInput must be either y, Y, n, or N";; esac done } while :; do case $1 in -h | -\? | --help) usage # Display a usage synopsis. exit ;; --) # End of all options. shift break ;; -d | --directory) shift DIRECTORY="${1}" ;; -h | --hour) shift HOUR="${1}" ;; -o | --days-old) shift DAYS_OLD="${1}" ;; -?*) printf 'Unknown option: %s\n' "$1" >&2 usage error ;; *) # Default case: No more options, so break out of the loop. break ;; esac shift done [[ "${DIRECTORY}" == "" ]] && error "A directory must be provided!" [[ -d "${DIRECTORY}" ]] && error "The given directory ${DIRECTORY} was invalid" [[ "${HOUR}" -gt 23 ]] && error "Hour may be no more than 23" [[ "${HOUR}" -lt 0 ]] && error "Hour may be no less than 0" [[ ! "${HOUR}" -eq "${HOUR}" ]] && error "Hour must be a number" [[ ! "${DAYS_OLD}" -eq "${DAYS_OLD}" ]] && error "Days-old must be a number" NEW_CRON_ENTRY="00 ${HOUR} * * * find ${DIRECTORY} -mtime +${DAYS_OLD} -exec rm {} \;" crontab -l | { cat; echo "${NEW_CRON_ENTRY}"; } | crontab -