Rsync только новые файлы с удаленного сервера

Вам нужно экранировать звездочку в шаблоне имени, потому что find хочет выполнить собственное расширение глобуса во всех различных каталогах, которые он ищет . Если не экранировать, * будет расширен оболочкой, и только для текущего каталога. Это, скорее всего, приведет к незаконному вызову находки .

4
05.08.2016, 08:02
2 ответа

Удивительно, но на самом деле это можно сделать только с помощью rsync (1) , без доступа оболочки к удаленному серверу.

Предполагая 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"
7
27.01.2020, 20:48

Это подход, который я использовал как часть сценария резервного копирования rsnapshot :

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

ssh -qx "$rhost" "cd '$rpath' && find . -mtime -7 -print0" |
    rsync --from0 --files-from=- -avHS "$rhost:$rpath/" .
5
27.01.2020, 20:48

Теги

Похожие вопросы