Вам нужно экранировать звездочку в шаблоне имени, потому что find
хочет выполнить собственное расширение глобуса во всех различных каталогах, которые он ищет . Если не экранировать, *
будет расширен оболочкой, и только для текущего каталога. Это, скорее всего, приведет к незаконному вызову находки
.
Удивительно, но на самом деле это можно сделать только с помощью 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"
Это подход, который я использовал как часть сценария резервного копирования rsnapshot
:
rhost=user@backuphost
rpath=/path/to/files
ssh -qx "$rhost" "cd '$rpath' && find . -mtime -7 -print0" |
rsync --from0 --files-from=- -avHS "$rhost:$rpath/" .