J’ai écrit un (très) petit script qui me permet de synchroniser à sens unique deux dossiers distants.
Ce script s’exécute une fois par jour par cron. À chaque exécution, il va récupérer du dossier source tout ce qui aura été créé ou modifier depuis la dernière bonne exécution du script. Cette synchronisation asymétrique me permet de vider régulièrement le dossier local, qui est dans l’usage un tampon, sans que les éléments déplacés ne soient à nouveaux resynchronisés à partir du dossier distant.
#!/bin/sh # remote mono-directional sync v2.2 # note: the first time this script runs, nothing append # because the script initializes the last exec to now. # configuration parameters # remote folder to sync to (the source) REMOTE_FOLDER='/remote/folder' # remote host and username to id against REMOTE_URI='remote-user@remote.kveer.fr' # local folder (the destination) LOCAL_URI='/mnt/pending' # file containing the last sync date LAST_EXECUTION='/var/lib/kveer/last-remote-user-sync' # the ssh private key to ident to the remote host REMOTE_KEY='rtorrent-sync-identity' # private variables -- DO NOT MODIFY TMP_FILES_TO_SYNC=$(mktemp -p /tmp rsync.XXXXXX) LAST_EXECUTION_FOLDER=$(dirname $LAST_EXECUTION) RSYNC_CMD="rsync -4 -htrvRc -z --partial --progress" # beginning of the script if [ ! -d `dirname $LAST_EXECUTION` ]; then mkdir `dirname $LAST_EXECUTION` date '+%Y-%m-%d %H:%M:%S' > $LAST_EXECUTION fi # initializing ssh-agent to connect to the remote eval $(ssh-agent) ssh-add remote-user-sync-identity # cleanup trap '[ -e /proc/$SSH_AGENT_PID ] && kill $SSH_AGENT_PID; [ -f "$TMP_FILES_TO_SYNC" ] && rm "$TMP_FILES_TO_SYNC"' 0 2 3 15 LAST_EXEC=$(cat $LAST_EXECUTION) ssh "$REMOTE_URI" "cd ${REMOTE_FOLDER};find . -daystart -maxdepth 1 -mindepth 1 -newermt '$LAST_EXEC' -print" > $TMP_FILES_TO_SYNC NEW_LAST_EXEC=$(date '+%Y-%m-%d %H:%M:%S') $RSYNC_CMD --files-from=$TMP_FILES_TO_SYNC "${REMOTE_URI}:${REMOTE_FOLDER}" "$LOCAL_URI" ret=$? # store last execution [ "$ret" -eq '0' ] && echo $NEW_LAST_EXEC > $LAST_EXECUTION