如何从特定日期向前同步文件/文件夹?

edo*_*tan 11 linux rsync find centos

我想从特定日期和转发 rsync 文件夹。例如。我想同步我 3 天前(当然还有 2 天前、一天前等)创建的文件夹。我知道我需要使用 find 和 rsync 但我不确定如何使用。任何的想法?谢谢!多坦。

fre*_*rik 15

rsync --progress --files-from=<(find /src_path -mtime -3 -type f -exec basename {} \;) /src_path/ /dst_path
Run Code Online (Sandbox Code Playgroud)

  • @user1595858,cron 可能会使用 `/bin/sh` 运行命令,这只能保证是 POSIX shell。`&lt;(command)` 语法是 bash 扩展 (2认同)

col*_*ete 8

你会想做一个findthensync

find /path -file -mtime +3 -exec rsync {} destination \;
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这会对每个文件运行“rsync”。与仅使用“--files-from”执行一次 rsync 相比,这可能会变得非常慢,并且如果目标是需要密码身份验证的远程服务器,则输入所有这些密码会变得很乏味。 (3认同)

cap*_*alg 8

修改Thomas 的答案,该答案根据文件的修改日期同步到脚本,使其更易于阅读并同步嵌套文件夹。

#!/bin/bash

TARGET=/PATH/TO/TARGET
HOST=username@host
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
Run Code Online (Sandbox Code Playgroud)

对于 init 来说,可能应该last_sync远程创建一个文件,下面的命令会派上用场

touch -d "2 hours ago" last_sync
Run Code Online (Sandbox Code Playgroud)

last_sync它创建一个名为2 小时前的创建日期的文件。