Lösung 1:
rsync --progress --files-from=<(find /src_path -mtime -3 -type f -exec basename {} \;) /src_path/ /dst_path
Lösung 2:
Sie möchten einen find
machen dann sync
find /path -file -mtime +3 -exec rsync {} destination \;
Lösung 3:
Angenommen, Sie möchten einen Ordner von einem Server mit einem lokalen Ordner synchronisieren, möchten aber immer nur die Dateien synchronisieren, die seit der letzten Synchronisierung erstellt wurden. Dann könnte der folgende Befehl nützlich sein. Wenn Sie dies einfügen, definiert z. B. Ihre .bashrc einen Alias, der alle neu erstellten Dateien synchronisiert. Die Dateien können lokal gelöscht werden und werden bei erneutem Aufruf des Sync-Befehls nicht erneut synchronisiert. Nur Dateien, die nach der letzten Synchronisierung auf dem Server erstellt wurden, werden in den lokalen Ordner kopiert.
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"
Lösung 4:
Ändern der Antwort von Thomas, die basierend auf dem Änderungsdatum einer Datei mit einem Skript synchronisiert wird, um besser lesbar zu sein und auch verschachtelte Ordner zu synchronisieren.
#!/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
Für init sollte man wohl einen last_sync
erstellen Datei aus der Ferne, für die sich der folgende Befehl als nützlich erweist
touch -d "2 hours ago" last_sync
wodurch eine Datei namens last_sync
erstellt wird mit einem Erstellungsdatum von vor 2 Stunden.