Rsync apenas novos arquivos de um servidor remoto

4

Eu tenho um servidor remoto com um compartilhamento rsync e preciso extrair apenas os últimos 7 dias de arquivos.

Eu posso enviar arquivos com base na data usando:

find /path -mtime 7 ... -exec rsync -a

mas eu não posso simplesmente entrar no servidor e enviar os arquivos para minha máquina local, então eu preciso de uma maneira de usar o rsync para pegar todos os arquivos com menos de 7 dias e pegá-los.

Não posso simplesmente sincronizar tudo, pois o total de dados no servidor excede 100 TB e não tenho acesso ao servidor remoto além do módulo rsync.

    
por lbutlr 05.08.2016 / 06:52

2 respostas

5

Surpreendentemente, isso pode ser feito com rsync(1) sozinho, sem acesso ao servidor remoto.

Presumindo bash(1) e 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
#! /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%pre%' "$fn"; fi
    done | \
    rsync -a --files-from=- -0 "$src" "$dst"
' "$fn"; fi done | \ rsync -a --files-from=- -0 "$src" "$dst"
    
por 05.08.2016 / 10:20
4

Esta é a abordagem que usei como parte de um script rsnapshot backup:

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

ssh -qx "$rhost" "cd '$rpath' && find . -mtime -7 -print0" |
    rsync --from0 --files-from=- -avHS "$rhost:$rpath/" .
    
por 05.08.2016 / 12:19

Tags