我有一台具有rsync共享的远程服务器,我只需要提取最近7天的文件。
我可以使用以下方法根据日期发送文件:
find /path -mtime 7 ... -exec rsync -a
但是我不能仅登录服务器并将文件发送到本地计算机,所以我需要一种使用rsync来获取所有少于7天的文件并进行抓取的方法。
我无法简单地同步所有内容,因为服务器上的总数据超过了100TB,并且除了rsync模块之外,我无权访问远程服务器。
令人惊讶的是,实际上可以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"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句