76 lines
2.2 KiB
Bash
Executable File
76 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Sync ~/Pictures to a NAS share, then run neatcli organize on both ends.
|
|
#
|
|
# Uses mount -t cifs with sudo (prompts for password if no credentials file).
|
|
# Create ~/.smb/mini.nas to avoid the password prompt each time:
|
|
# echo -e "username=schmeeve\npassword=yourpass" > ~/.smb/mini.nas
|
|
# chmod 600 ~/.smb/mini.nas
|
|
#
|
|
# Adjust SHARE and SUBPATH to match your environment.
|
|
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--help|-h)
|
|
cat <<'EOF'
|
|
Usage: sync-pictures [options]
|
|
|
|
Sync ~/Pictures to a NAS share and run neatcli organize on both ends.
|
|
|
|
Options:
|
|
-h, --help Show this help message and exit
|
|
EOF
|
|
exit 0
|
|
;;
|
|
esac
|
|
done
|
|
|
|
SHARE="//mini.nas/miniShare1"
|
|
SUBPATH="Pictures"
|
|
MOUNTPOINT="${HOME}/mnt/miniShare1"
|
|
CREDENTIALS="${HOME}/.smb/mini.nas"
|
|
SOURCE="${HOME}/Pictures"
|
|
START="$(date +%s)"
|
|
|
|
echo "[sync-pictures] Starting at $(date)"
|
|
|
|
# 1. Create mountpoint and mount if not already mounted
|
|
if mount | grep -q "${MOUNTPOINT}"; then
|
|
echo "[sync-pictures] Already mounted at ${MOUNTPOINT}"
|
|
else
|
|
echo "[sync-pictures] 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-pictures] ERROR: Failed to mount ${SHARE}"
|
|
exit 1
|
|
fi
|
|
echo "[sync-pictures] Mounted at ${MOUNTPOINT}"
|
|
fi
|
|
|
|
# 2. One-way rsync contents of ~/Pictures → share subpath
|
|
MP="${MOUNTPOINT}/${SUBPATH}"
|
|
echo "[sync-pictures] Syncing ${SOURCE}/ → ${MP}/"
|
|
rsync -vrau \
|
|
"${SOURCE}/" \
|
|
"${MP}/" \
|
|
--progress --stats \
|
|
--exclude=".DS_Store"
|
|
|
|
# 3. Run neatcli organize on both source and dest
|
|
if command -v neatcli &>/dev/null; then
|
|
echo "[sync-pictures] Organizing source: ${SOURCE}"
|
|
neatcli organize --execute "${SOURCE}"
|
|
echo "[sync-pictures] Organizing dest: ${MP}"
|
|
neatcli organize --execute "${MP}"
|
|
else
|
|
echo "[sync-pictures] WARNING: neatcli not found in PATH, skipping organize step"
|
|
fi
|
|
|
|
DURATION=$(( $(date +%s) - START ))
|
|
echo "[sync-pictures] Done in ${DURATION}s at $(date)"
|