Rsync 仅来自远程服务器的新文件

lbu*_*tlr 4 ssh find rsync

我有一个带有 rsync 共享的远程服务器,我只需要提取最近 7 天的文件。

我可以使用以下方法根据日期发送文件:

find /path -mtime 7 ... -exec rsync -a
Run Code Online (Sandbox Code Playgroud)

但我不能只是登录到服务器并将文件发送到我的本地机器,所以我需要一种方法来使用 rsync 来获取所有不到 7 天的文件并抓取它们。

我不能简单地同步所有内容,因为服务器上的总数据超过 100TB,而且除了 rsync 模块之外,我无权访问远程服务器。

Sat*_*ura 7

令人惊讶的是,这实际上可以rsync(1)单独完成,而无需通过 shell 访问远程服务器。

假设bash(1)和 GNU date(1)

#! /usr/bin/env bash

src=rsync://example.com/archives/
dst=/path/to/mirrors

cutoff=$( date -d '7 days ago' +%s )
rsync -na --no-motd --out-format='%M %f' "$src" "$dst" | \
    while IFS= read -r line; do
        d=${line%% *}
        fn=${line#* }
        fdate=$( date -d "${d/-/ }" +%s ) || continue
        if [ $fdate -ge $cutoff ]; then printf '%s\0' "$fn"; fi
    done | \
    rsync -a --files-from=- -0 "$src" "$dst"
Run Code Online (Sandbox Code Playgroud)


roa*_*ima 5

这是我用作rsnapshot备份脚本一部分的方法:

rhost=user@backuphost
rpath=/path/to/files

ssh -qx "$rhost" "cd '$rpath' && find . -mtime -7 -print0" |
    rsync --from0 --files-from=- -avHS "$rhost:$rpath/" .
Run Code Online (Sandbox Code Playgroud)