#!/bin/bash set -e # Exit if error # This script synchronizes data from FTP into local folder: # - remove file that do not exist anymore in the FTP (rsync --delete flag) # - do not update file (a file that already existing locally will be ignore, rsync --ignore-existing flag)) # # No modification will be done in the FTP, as the mount is done in read only mode. # # Configuration is gathered at the beginning of the script. # ============================================================================= # Configuration # ============================================================================= FTP_USER=ftp FTP_PASS=ftp FTP_IP=192.168.1.21 FTP_PORT=2121 SOURCE=tmp_phone-ftp/ # Temporary local folder, to mount FTP folder DESTINATION=phone/ # Local folder where to save files LINK=() LINK+=("WhatsApp/Media" "WhatsApp") LINK+=("DCIM" "DCIM") EXCLUDE_DIR=saved # ============================================================================= echo "========================================================================" echo SOURCE: ${SOURCE} echo DESTINATION: ${DESTINATION} echo "========================================================================" mkdir -p ${DESTINATION} echo "Mount FTP folder in ${SOURCE} in read-only" if [ ! -d ${SOURCE} ]; then mkdir -p ${SOURCE} curlftpfs -r ${FTP_USER}:${FTP_PASS}@${FTP_IP}:${FTP_PORT}/ ${SOURCE} echo curlftpfs -r ${FTP_USER}:${FTP_PASS}@${FTP_IP}:${FTP_PORT}/ ${SOURCE} fi echo "Start synchronisation" for ((i=0; i<${#LINK[@]}; i+=2)); do SOURCE_DIR=${LINK[i]} DESTINATION_DIR=${LINK[i+1]} echo "############################## ${SOURCE_DIR} > ${DESTINATION_DIR}" if [ ! -d "${SOURCE}/${SOURCE_DIR}" ]; then echo "WARNING - cannot find ${SOURCE}/${SOURCE_DIR}" continue fi mkdir -p "${DESTINATION}/${DESTINATION_DIR}/" # WARNING with source, rsync do: copy folder with src but only folder content with src/ rsync -rv --delete --ignore-existing --exclude "${EXCLUDE_DIR}" "${SOURCE}/${SOURCE_DIR}/" "${DESTINATION}/${DESTINATION_DIR}/" done # Wait that rsync free FTP mounted folder sleep 1 echo "Remove mounted ${SOURCE}" fusermount -u ${SOURCE} rmdir ${SOURCE}