Guest User

sync-script

a guest
Sep 17th, 2025
11
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.14 KB | Source Code | 0 0
  1. # Ensure rclone is in PATH
  2. export PATH=$PATH:/usr/local/bin
  3.  
  4. # Sync script for remote media files with proper tracking
  5. LOGDIR="/var/log/rclone"
  6. REMOTE="seedbox"
  7. REMOTE_BASE="/seedbox/torrents/downloads/completed"
  8. LOCAL_BASE="/mnt/data/media/sync"
  9. NTFY_URL="https://ntfy.mydomain.com/seedbox_sync"
  10.  
  11. # Download tracking file
  12. TRACK_DIR="/var/lib/rclone"
  13. TRACK_FILE="$TRACK_DIR/synced-files.txt"
  14.  
  15. mkdir -p "$LOGDIR"
  16. mkdir -p "$LOCAL_BASE"
  17. mkdir -p "$TRACK_DIR"
  18. touch "$TRACK_FILE"
  19.  
  20. # Function to send notifications (keeping your existing one)
  21. send_notification() {
  22.     local title="$1"
  23.     local message="$2"
  24.     local priority="${3:-default}"
  25.     local tags="${4:-}"
  26.  
  27.     curl -k -H "Title: $title" \
  28.          -H "Priority: $priority" \
  29.          -H "Tags: $tags" \
  30.          -d "$(printf "$message")" \
  31.          "$NTFY_URL"
  32. }
  33.  
  34. echo "======================================"
  35. echo "Starting Media Sync"
  36. echo "$(date '+%Y-%m-%d %H:%M:%S')"
  37. echo "======================================"
  38.  
  39. send_notification "Sync Started" "Beginning sync from remote server..." "low" "arrow_forward"
  40.  
  41. # Get list of all remote files (excluding unwanted patterns)
  42. echo "Checking remote files..."
  43. REMOTE_FILES=$(mktemp)
  44. rclone ls "${REMOTE}:${REMOTE_BASE}" \
  45.     --exclude ".stfolder/**" \
  46.     --exclude "*.dat" \
  47.     --exclude "Thumbs.db" \
  48.     --exclude ".DS_Store" \
  49.     --exclude "*~uTorrentPartFile*" \
  50.     2>/dev/null | awk '{$1=""; print substr($0,2)}' | sort > "$REMOTE_FILES"
  51.  
  52. # Find files that haven't been downloaded before
  53. NEW_TO_DOWNLOAD=$(mktemp)
  54. comm -23 "$REMOTE_FILES" <(sort "$TRACK_FILE") > "$NEW_TO_DOWNLOAD"
  55. NEW_COUNT=$(wc -l < "$NEW_TO_DOWNLOAD")
  56.  
  57. if [ $NEW_COUNT -eq 0 ]; then
  58.     echo "No new files to download"
  59.     send_notification "Sync Complete" "No new files to download" "low" "heavy_check_mark"
  60. else
  61.     echo "Found $NEW_COUNT new files to download"
  62.  
  63.     # Create include file for rclone
  64.     INCLUDE_FILE=$(mktemp)
  65.     cp "$NEW_TO_DOWNLOAD" "$INCLUDE_FILE"
  66.  
  67.     # Download with detailed logging to capture what actually transfers
  68.     echo "Downloading new files..."
  69.     TRANSFER_LOG=$(mktemp)
  70.  
  71.     rclone copy \
  72.         "${REMOTE}:${REMOTE_BASE}" \
  73.         "${LOCAL_BASE}" \
  74.         --files-from-raw "$INCLUDE_FILE" \
  75.         --transfers 10 \
  76.         --checkers 16 \
  77.         --buffer-size 32M \
  78.         --drive-chunk-size 64M \
  79.         --contimeout 60s \
  80.         --timeout 300s \
  81.         --retries 3 \
  82.         --low-level-retries 10 \
  83.         --stats 30s \
  84.         --log-file="${LOGDIR}/sync.log" \
  85.         --log-level INFO \
  86.         --progress 2>&1 | tee "$TRANSFER_LOG"
  87.  
  88.     SYNC_STATUS=$?
  89.  
  90.     if [ $SYNC_STATUS -eq 0 ]; then
  91.         # Simply check what new files are in the sync folder
  92.         ACTUALLY_TRANSFERRED=$(mktemp)
  93.         find "$LOCAL_BASE" -type f 2>/dev/null | \
  94.             sed "s|${LOCAL_BASE}/||" | sort | \
  95.             comm -23 - <(sort "$TRACK_FILE") > "$ACTUALLY_TRANSFERRED"
  96.  
  97.         TRANSFERRED_COUNT=$(wc -l < "$ACTUALLY_TRANSFERRED")
  98.  
  99.         if [ $TRANSFERRED_COUNT -gt 0 ]; then
  100.             echo "$(date '+%Y-%m-%d %H:%M:%S') - Successfully synced $TRANSFERRED_COUNT files"
  101.  
  102.             # Add to tracking file
  103.             cat "$ACTUALLY_TRANSFERRED" >> "$TRACK_FILE"
  104.             sort -u "$TRACK_FILE" -o "$TRACK_FILE"
  105.  
  106.             # Simple notification
  107.             send_notification "Sync Complete" "Transferred $TRANSFERRED_COUNT files" "default" "heavy_check_mark"
  108.         else
  109.             echo "$(date '+%Y-%m-%d %H:%M:%S') - Sync completed but no new files found"
  110.             send_notification "Sync Complete" "No new files transferred" "low" "heavy_check_mark"
  111.         fi
  112.  
  113.         rm -f "$ACTUALLY_TRANSFERRED"
  114.     else
  115.         echo "$(date '+%Y-%m-%d %H:%M:%S') - Sync failed"
  116.         send_notification "Sync Failed" "Check logs for details" "high" "warning"
  117.     fi
  118.  
  119.     # Cleanup
  120.     rm -f "$INCLUDE_FILE" "$TRANSFER_LOG"
  121. fi
  122.  
  123. # Cleanup
  124. rm -f "$REMOTE_FILES" "$NEW_TO_DOWNLOAD"
  125.  
  126. echo "======================================"
  127. echo "Total files tracked: $(wc -l < "$TRACK_FILE")"
  128. echo "$(date '+%Y-%m-%d %H:%M:%S') - Sync complete"
  129. echo "======================================"
Add Comment
Please, Sign In to add comment