Solución 1:
rsync --progress --files-from=<(find /src_path -mtime -3 -type f -exec basename {} \;) /src_path/ /dst_path
Solución 2:
Querrías hacer un find
entonces sync
find /path -file -mtime +3 -exec rsync {} destination \;
Solución 3:
Suponiendo que desea sincronizar alguna carpeta de un servidor a una carpeta local, pero siempre desea sincronizar solo los archivos que se han creado desde la última sincronización. Entonces el siguiente comando podría ser útil. Poniendo esto, por ejemplo, su .bashrc define un alias que sincroniza todos los archivos recién creados. Los archivos se pueden eliminar localmente y no se sincronizarán nuevamente cuando se vuelva a llamar al comando de sincronización. Solo los archivos que se hayan creado después de la última sincronización en el servidor se copiarán en la carpeta local.
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"
Solución 4:
Modificar la respuesta de Thomas, que se sincroniza en función de la fecha de modificación de un archivo en un script, para que sea más legible para los humanos y también para sincronizar carpetas anidadas.
#!/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
Para init, probablemente debería crear un last_sync
archivo de forma remota, para lo cual el siguiente comando es útil
touch -d "2 hours ago" last_sync
que crea un archivo llamado last_sync
con una fecha de creación de hace 2 horas.