Solution 1 :
rsync --progress --files-from=<(find /src_path -mtime -3 -type f -exec basename {} \;) /src_path/ /dst_path
Solution 2 :
Vous voudriez faire un find
puis sync
find /path -file -mtime +3 -exec rsync {} destination \;
Solution 3 :
En supposant que vous souhaitiez synchroniser un dossier d'un serveur vers un dossier local, mais que vous souhaitiez toujours synchroniser uniquement les fichiers créés depuis la dernière synchronisation. Alors la commande suivante peut être utile. En mettant cela, par exemple, votre .bashrc définit un alias qui synchronise tous les fichiers nouvellement créés. Les fichiers peuvent être supprimés localement et ne seront plus synchronisés lors du nouvel appel de la commande de synchronisation. Seuls les fichiers créés après la dernière synchronisation sur le serveur seront copiés dans le dossier local.
TARGET=/local/target/folder/
SOURCE=/server/folder/
alias sync-since-last="touch $TARGET/last_sync && rsync -ahv --update --files-from=<(ssh example@unixlinux.online 'find $SOURCE/source/ -type f -newer $SOURCE/last_sync -exec basename {} \;') example@unixlinux.online:$SOURCE/source/ $TARGET && rsync -ahv $TARGET/last_sync example@unixlinux.online:$SOURCE"
Solution 4 :
Modification de la réponse de Thomas qui se synchronise en fonction de la date de modification d'un fichier vers un script, pour être plus lisible par l'homme et synchroniser également les dossiers imbriqués.
#!/bin/bash
TARGET=/PATH/TO/TARGET
example@unixlinux.online
SOURCE=/ABSOLUTE/SOURCE/PATH/ON/HOST
touch $TARGET/last_sync
rsync \
-ahrv \
--update \
--files-from=<(ssh $HOST "find $SOURCE -type f -newer $SOURCE/last_sync -exec realpath --relative-to=$SOURCE '{}' \;") \
$HOST:$SOURCE \
$TARGET
rsync -ahv $TARGET/last_sync $HOST:$SOURCE
Pour init, il faudrait probablement créer un last_sync
fichier à distance, auquel la commande suivante est pratique
touch -d "2 hours ago" last_sync
qui crée un fichier nommé last_sync
avec une date de création d'il y a 2 heures.