147 lines
4.9 KiB
Bash
147 lines
4.9 KiB
Bash
#!/bin/bash
|
|
|
|
# -- Configuration ---
|
|
LOG_FILE="logs/03_find_and_sync_data.log"
|
|
DRY_RUN=""
|
|
SOURCE_WIN_DRIVE="/media/sam/8294CD2994CD2111"
|
|
TARGET_DATA_DIR="/data"
|
|
|
|
# Check for --dry-run flag
|
|
if [ "$1" == "--dry-run" ]; then
|
|
DRY_RUN="--dry-run"
|
|
echo "--- PERFORMING DRY RUN ---" | tee -a "$LOG_FILE"
|
|
fi
|
|
|
|
# Helper function for logging
|
|
log() {
|
|
echo "$1" | tee -a "$LOG_FILE"
|
|
}
|
|
|
|
run_rsync_dry_run() {
|
|
local source_path="$1"
|
|
local target_path="$2"
|
|
local descriptive_name="$3"
|
|
|
|
log "------------------------------------------------------------------------"
|
|
log "Preparing to sync: $descriptive_name"
|
|
log "Source: $source_path"
|
|
log "Target: $target_path"
|
|
log "------------------------------------------------------------------------"
|
|
|
|
# Ensure target directory exists for rsync
|
|
if [ ! -d "$target_path" ]; then
|
|
log "Creating target directory: $target_path"
|
|
if [ -z "$DRY_RUN" ]; then
|
|
mkdir -p "$target_path"
|
|
fi
|
|
fi
|
|
|
|
# Use rsync -a (archive mode) for comprehensive copying, and -n for dry run.
|
|
# The trailing slash on source_path copies contents, not the directory itself.
|
|
rsync -avh --info=progress2 $DRY_RUN "${source_path}/" "${target_path}/" 2>&1 | tee -a "$LOG_FILE"
|
|
log "Finished dry run for $descriptive_name."
|
|
}
|
|
|
|
# Initialize log file
|
|
echo "Data Discovery and Sync Log - $(date)" > "$LOG_FILE"
|
|
echo "----------------------------------------------------" >> "$LOG_FILE"
|
|
|
|
if [ -n "$DRY_RUN" ]; then
|
|
log "Dry run mode enabled. No files will be changed."
|
|
fi
|
|
|
|
log "Source Windows Drive: $SOURCE_WIN_DRIVE"
|
|
log "Target Data Directory: $TARGET_DATA_DIR"
|
|
log ""
|
|
|
|
# --- Mapping Configuration (Source on Windows Drive -> Target in /data) ---
|
|
# Each entry is: "source_path" "target_subdirectory_in_data" "descriptive_name"
|
|
|
|
# Personal Documents, Pictures, Music, Videos
|
|
declare -a PERSONAL_FOLDERS=(
|
|
"Users/sam/Documents" "personal/Documents" "Personal Documents"
|
|
"Users/sam/Pictures" "personal/Pictures" "Personal Pictures"
|
|
"Users/sam/Music" "personal/Music" "Personal Music"
|
|
"Users/sam/Videos" "personal/Videos" "Personal Videos"
|
|
"Users/sam/Downloads" "personal/Downloads" "Personal Downloads"
|
|
)
|
|
|
|
# Web/Work Projects
|
|
declare -a WORK_PROJECTS=(
|
|
"xampp/htdocs" "work/htdocs" "XAMPP htdocs projects"
|
|
"frei0r" "work/frei0r" "Frei0r Projects"
|
|
# Add other common workspace/project folders here if known
|
|
# e.g., "Users/sam/workspace" "work/workspace" "General Workspaces"
|
|
)
|
|
|
|
# IoT Projects
|
|
declare -a IOT_PROJECTS=(
|
|
"Arduino" "iot/Arduino" "Arduino Projects" # Assuming there's an Arduino folder
|
|
)
|
|
|
|
# Generic project folders to search for
|
|
declare -a GENERIC_PROJECT_NAMES=(
|
|
"Projects"
|
|
"Code"
|
|
"Dev"
|
|
)
|
|
|
|
# --- Execute mappings ---
|
|
|
|
log "--- Processing Personal Folders ---"
|
|
for ((i=0; i<${#PERSONAL_FOLDERS[@]}; i+=3)); do
|
|
SOURCE="${SOURCE_WIN_DRIVE}/${PERSONAL_FOLDERS[i]}"
|
|
TARGET="${TARGET_DATA_DIR}/${PERSONAL_FOLDERS[i+1]}"
|
|
DESC="${PERSONAL_FOLDERS[i+2]}"
|
|
if [ -d "$SOURCE" ]; then
|
|
run_rsync_dry_run "$SOURCE" "$TARGET" "$DESC"
|
|
else
|
|
log "WARNING: Source directory not found: $SOURCE"
|
|
fi
|
|
done
|
|
|
|
log ""
|
|
log "--- Processing Work Projects ---"
|
|
for ((i=0; i<${#WORK_PROJECTS[@]}; i+=3)); do
|
|
SOURCE="${SOURCE_WIN_DRIVE}/${WORK_PROJECTS[i]}"
|
|
TARGET="${TARGET_DATA_DIR}/${WORK_PROJECTS[i+1]}"
|
|
DESC="${WORK_PROJECTS[i+2]}"
|
|
if [ -d "$SOURCE" ]; then
|
|
run_rsync_dry_run "$SOURCE" "$TARGET" "$DESC"
|
|
else
|
|
log "WARNING: Source directory not found: $SOURCE"
|
|
fi
|
|
done
|
|
|
|
log ""
|
|
log "--- Processing IoT Projects ---"
|
|
for ((i=0; i<${#IOT_PROJECTS[@]}; i+=3)); do
|
|
SOURCE="${SOURCE_WIN_DRIVE}/${IOT_PROJECTS[i]}"
|
|
TARGET="${TARGET_DATA_DIR}/${IOT_PROJECTS[i+1]}"
|
|
DESC="${IOT_PROJECTS[i+2]}"
|
|
if [ -d "$SOURCE" ]; then
|
|
run_rsync_dry_run "$SOURCE" "$TARGET" "$DESC"
|
|
else
|
|
log "WARNING: Source directory not found: $SOURCE"
|
|
fi
|
|
done
|
|
|
|
log ""
|
|
log "--- Searching for Generic Project Folders ---"
|
|
# This section tries to find common project-like folders directly under the Windows user profile
|
|
# and prompts the user for action. For automation, we'll try to guess.
|
|
# For now, we'll just list them to avoid making assumptions without user confirmation.
|
|
|
|
log "Searching for additional project-like folders under ${SOURCE_WIN_DRIVE}/Users/sam/ and similar paths:"
|
|
find "${SOURCE_WIN_DRIVE}/Users/sam" -maxdepth 3 -type d \( -name "Projects" -o -name "Code" -o -name "Dev" -o -name "*workspace*" -o -name "*repos*" \) 2>/dev/null | while read -r found_dir; do
|
|
log "Found potential project directory: $found_dir"
|
|
# In a real interactive session, we'd ask the user where to put this.
|
|
# For now, we just log its existence.
|
|
done
|
|
|
|
log ""
|
|
log "--- Data discovery and dry run finished. ---"
|
|
log "Please review the log file: $LOG_FILE"
|
|
log "If the output looks correct, run this script again with '--live' (or no flag) to perform the actual copy."
|
|
log "Example: scripts/03_find_and_sync_data.sh"
|