Řešení 1:
rsync --progress --files-from=<(find /src_path -mtime -3 -type f -exec basename {} \;) /src_path/ /dst_path
Řešení 2:
Chtěli byste udělat find
pak sync
find /path -file -mtime +3 -exec rsync {} destination \;
Řešení 3:
Za předpokladu, že chcete synchronizovat nějakou složku ze serveru do místní složky, ale vždy chcete synchronizovat pouze soubory, které byly vytvořeny od poslední synchronizace. Pak může být užitečný následující příkaz. Když to vložíte, např. váš .bashrc definuje alias, který synchronizuje všechny nově vytvořené soubory. Soubory lze lokálně smazat a nebudou znovu synchronizovány při opětovném volání příkazu synchronizace. Do místní složky budou zkopírovány pouze soubory, které byly vytvořeny po poslední synchronizaci na serveru.
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"
Řešení 4:
Úprava odpovědi od Thomase, která se synchronizuje na základě data úpravy souboru do skriptu, aby byla lépe čitelná pro lidi a synchronizovala také vnořené složky.
#!/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
Pro init byste pravděpodobně měli vytvořit last_sync
soubor na dálku, ke kterému se hodí následující příkaz
touch -d "2 hours ago" last_sync
který vytvoří soubor s názvem last_sync
s datem vytvoření před 2 hodinami.