62 lines
1.8 KiB
Bash
Executable File
62 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Sync ~/webGoggles to a NAS share.
|
|
#
|
|
# Uses mount -t cifs with sudo (prompts for password if no credentials file).
|
|
# Create ~/.smb/ts.nas to avoid the password prompt each time:
|
|
# echo -e "username=schmeeve\npassword=yourpass" > ~/.smb/ts.nas
|
|
# chmod 600 ~/.smb/ts.nas
|
|
#
|
|
# No deletes or overwrites: rsync --backup renames any existing dest file
|
|
# with a -CONFLICT suffix before writing the source version.
|
|
#
|
|
# Adjust SHARE, SUBPATH, and SOURCE to match your environment.
|
|
|
|
SHARE="//ts.nas/aura"
|
|
SUBPATH="webGoggles"
|
|
MOUNTPOINT="${HOME}/mnt/ts.nas"
|
|
CREDENTIALS="${HOME}/.smb/ts.nas"
|
|
SOURCE="${HOME}/webGoggles"
|
|
START="$(date +%s)"
|
|
|
|
echo "[sync-webgoggles] Starting at $(date)"
|
|
|
|
# Verify source exists
|
|
if [ ! -d "${SOURCE}" ]; then
|
|
echo "[sync-webgoggles] ERROR: Source ${SOURCE} does not exist"
|
|
exit 1
|
|
fi
|
|
|
|
# 1. Create mountpoint and mount if not already mounted
|
|
if mount | grep -q "${MOUNTPOINT}"; then
|
|
echo "[sync-webgoggles] Already mounted at ${MOUNTPOINT}"
|
|
else
|
|
echo "[sync-webgoggles] Mounting ${SHARE} → ${MOUNTPOINT}"
|
|
mkdir -p "${MOUNTPOINT}"
|
|
OPTS="username=schmeeve,uid=$(id -u),gid=$(id -g),forceuid,forcegid,nounix,serverino"
|
|
if [ -f "${CREDENTIALS}" ]; then
|
|
OPTS="${OPTS},credentials=${CREDENTIALS}"
|
|
fi
|
|
sudo mount -t cifs "${SHARE}" "${MOUNTPOINT}" -o "${OPTS}"
|
|
if ! mount | grep -q "${MOUNTPOINT}"; then
|
|
echo "[sync-webgoggles] ERROR: Failed to mount ${SHARE}"
|
|
exit 1
|
|
fi
|
|
echo "[sync-webgoggles] Mounted at ${MOUNTPOINT}"
|
|
fi
|
|
|
|
# 2. One-way rsync of SOURCE into the share subpath
|
|
MP="${MOUNTPOINT}/${SUBPATH}"
|
|
mkdir -p "${MP}"
|
|
echo "[sync-webgoggles] Syncing ${SOURCE}/ → ${MP}/"
|
|
rsync -vrau \
|
|
"${SOURCE}/" \
|
|
"${MP}/" \
|
|
--backup \
|
|
--suffix="-CONFLICT" \
|
|
--exclude=".DS_Store" \
|
|
--progress --stats
|
|
|
|
DURATION=$(( $(date +%s) - START ))
|
|
echo "[sync-webgoggles] Done in ${DURATION}s at $(date)"
|