Soluzione 1:
rsync --progress --files-from=<(find /src_path -mtime -3 -type f -exec basename {} \;) /src_path/ /dst_path
Soluzione 2:
Vorresti fare un find
poi sync
find /path -file -mtime +3 -exec rsync {} destination \;
Soluzione 3:
Supponendo che tu voglia sincronizzare alcune cartelle da un server a una cartella locale, ma vuoi sempre sincronizzare solo i file che sono stati creati dall'ultima sincronizzazione. Quindi il seguente comando potrebbe essere utile. Inserendo questo, ad esempio, il tuo .bashrc definisce un alias che sincronizza tutti i file appena creati. I file possono essere eliminati localmente e non verranno sincronizzati nuovamente quando si chiama nuovamente il comando di sincronizzazione. Solo i file che sono stati creati dopo l'ultima sincronizzazione sul server verranno copiati nella cartella locale.
TARGET=/local/target/folder/
SOURCE=/server/folder/
alias sync-since-last="touch $TARGET/last_sync && rsync -ahv --update --files-from=<(ssh [email protected] 'find $SOURCE/source/ -type f -newer $SOURCE/last_sync -exec basename {} \;') [email protected]:$SOURCE/source/ $TARGET && rsync -ahv $TARGET/last_sync [email protected]:$SOURCE"
Soluzione 4:
Modifica della risposta di Thomas che si sincronizza in base alla data di modifica di un file in uno script, per essere più leggibile dall'uomo e sincronizzare anche le cartelle nidificate.
#!/bin/bash
TARGET=/PATH/TO/TARGET
[email protected]
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
Per init si dovrebbe probabilmente creare un last_sync
file in remoto, a cui torna utile il seguente comando
touch -d "2 hours ago" last_sync
che crea un file chiamato last_sync
con una data di creazione di 2 ore fa.