summaryrefslogtreecommitdiff
path: root/retention.sh
diff options
context:
space:
mode:
Diffstat (limited to 'retention.sh')
-rwxr-xr-xretention.sh71
1 files changed, 71 insertions, 0 deletions
diff --git a/retention.sh b/retention.sh
new file mode 100755
index 0000000..b9bf8a7
--- /dev/null
+++ b/retention.sh
@@ -0,0 +1,71 @@
+#!/bin/bash
+
+SRC_BASE="/mnt/convert/archives"
+DEST_BASE="/mnt/5tb/archives"
+RETENTION_MONTHS=3
+TODAY=$(date +%s)
+
+LOG_FILE="/var/log/archive_retention.log"
+
+# Log start of run
+echo "=== Archive Sync: $(date) ===" >> "$LOG_FILE"
+
+# Init counters
+files_checked=0
+files_archived=0
+files_deleted=0
+
+# Traverse all subfolders
+find "$SRC_BASE" -type f -name '*.mp3' | while read -r file; do
+ ((files_checked++))
+
+ filename=$(basename "$file")
+ relative_path=$(realpath --relative-to="$SRC_BASE" "$file")
+ subfolder=$(dirname "$relative_path")
+ dest_folder="$DEST_BASE/$subfolder"
+ dest_file="$dest_folder/$filename"
+
+ # --- Date extraction logic (supports YYYY-MM-DD or YYYYMMDD) ---
+ file_date=$(echo "$filename" | grep -oP '\d{4}-\d{2}-\d{2}')
+
+ if [ -z "$file_date" ]; then
+ raw_date=$(echo "$filename" | grep -oP '\d{8}')
+ if [ ! -z "$raw_date" ]; then
+ file_date="${raw_date:0:4}-${raw_date:4:2}-${raw_date:6:2}"
+ fi
+ fi
+
+ if [ -z "$file_date" ]; then
+ echo "Skipping (no valid date found): $filename" >> "$LOG_FILE"
+ continue
+ fi
+
+ file_epoch=$(date -d "$file_date" +%s 2>/dev/null)
+ if [ -z "$file_epoch" ]; then
+ echo "Skipping (invalid date format): $filename" >> "$LOG_FILE"
+ continue
+ fi
+
+ age_months=$(( (TODAY - file_epoch) / 2592000 ))
+
+ # Make sure destination folder exists
+ mkdir -p "$dest_folder"
+
+ if [ "$age_months" -le "$RETENTION_MONTHS" ]; then
+ if [ ! -f "$dest_file" ]; then
+ echo "Archiving: $filename → $dest_folder" >> "$LOG_FILE"
+ cp "$file" "$dest_file"
+ ((files_archived++))
+ fi
+ else
+ if [ -f "$dest_file" ]; then
+ echo "Deleting expired: $filename" >> "$LOG_FILE"
+ rm "$dest_file"
+ ((files_deleted++))
+ fi
+ fi
+done
+
+# Final summary log
+echo "Checked: $files_checked | Archived: $files_archived | Deleted: $files_deleted" >> "$LOG_FILE"
+echo "" >> "$LOG_FILE"