diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..66b4b3c --- /dev/null +++ b/.gitignore @@ -0,0 +1,31 @@ +# Git Ignore +###################### + +# For this script +###################### +quarantine/ +log/ +ClamCron.conf + +# Track this file +###################### +!.gitignore + +# Project # +###################### +.local-only/ + +# OS generated files # +###################### +.DS_Store +.DS_Store? +.Spotlight-V100 +.Trashes* +ehthumbs.db +Thumbs.db +.fuse* + +# CUSTOM # +###################### +log/* +!log/.gitignore \ No newline at end of file diff --git a/ClamCron.sh b/ClamCron.sh new file mode 100755 index 0000000..4b8fead --- /dev/null +++ b/ClamCron.sh @@ -0,0 +1,93 @@ +#!/bin/bash +# ====================================================================================== +# Script for Scanning Directories with ClamScan at Regular Intervals +# ====================================================================================== +# +: ' + + Title : + ClamCron.sh + + Directories ALWAYS ignored : + --proc + --sys + --dev + --quarantine + + + Action taken for positive results: + + Moved to a quarantine folder defined in conf file. + + Usage : + Set settings in ClamCron.conf file. + + Run this script at the frequency you wish with a cronjob. + +'; + + +#################### LOAD CONF #################### + + +CONF_FILE="$( cd "$( dirname "${BASH_SOURCE[0]}" )/conf/" && readlink -f "ClamCron.conf" )"; + + +##################### SANITY ##################### + + +if [ ! -f "$CONF_FILE" ]; then + echo "Required CONF_FILE.conf was not loaded, please verify it is present and loadable."; + exit 1; +fi + +source "$CONF_FILE"; + + +###################### MAIN ###################### + + +function main() { + + start_log; + + echo "" > "$SCRIPT_TMP"; + + echo_log "$LOG_KICKOFF $SCAN_DIR" + + nohup $CLAMSCAN_LOC -roi "$SCAN_DIR" \ + --exclude-dir="^/proc" \ + --exclude-dir="^/sys" \ + --exclude="/dev" \ + --exclude-dir="quarantine/" \ + --move="$QUAR_DIR" \ + -l "$SCRIPT_TMP" &>/dev/null; + + cat "$SCRIPT_TMP" | tee -a "$SCRIPT_LOG"; + + end_log; + +} + + +###################### SUBS ###################### + + +function start_log() { + echo -e "$LOG_BEGIN" | tee -a "$SCRIPT_LOG"; +} + +function end_log() { + echo -e "$LOG_END" | tee -a "$SCRIPT_LOG"; +} + +function echo_log() { + echo -e "\n$1\n" | tee -a "$SCRIPT_LOG"; +} + + +##################### INIT ###################### + + +main; +exit 1; \ No newline at end of file diff --git a/conf/ClamCron.conf.example b/conf/ClamCron.conf.example new file mode 100644 index 0000000..e7f3cd4 --- /dev/null +++ b/conf/ClamCron.conf.example @@ -0,0 +1,33 @@ +#!/bin/bash + +export SCAN_DIR="/"; + +export CLAMSCAN_LOC="/usr/bin/clamscan"; + +export SCRIPT_NAME="ClamCron"; + +export DATE_CUR=$(date '+%Y-%m-%d__%H:%M:%S'); + +export SCRIPT_DIR="$( dirname "${BASH_SOURCE[0]}" )"; + +export SCRIPT_TMP="$SCRIPT_DIR/log/$SCRIPT_NAME.tmp"; + +export SCRIPT_LOG="$SCRIPT_DIR/log/$SCRIPT_NAME--$DATE_CUR.log"; + +export QUAR_DIR="$SCRIPT_DIR/quarantine"; + +export LOG_BEGIN="================================================================= +|| || +|| SuperDuper $SCRIPT_NAME || +|| $DATE_CUR || +|| || +================================================================= +"; + +export LOG_KICKOFF="----------- SCAN KICKOFF -----------\nScanning Directory:"; + +export LOG_END=" + +================================================================= +||~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|| +================================================================="; \ No newline at end of file