rsync файли новіші за 1 тиждень


24

Я хочу запустити rsync на сервері A, щоб скопіювати всі файли з сервера B, коли вони новіші за 7 днів.

find . -mtime -7

Я не хочу видаляти файли на сервері B.


б) як часто ви запускаєте rsync?

Відповіді:


30

Це повинно переконати вас в твердому шляху

rsync -RDa0P \
    --files-from=<(find sourcedir/./ -mtime -7 -print0) \
    . user@B:targetdir/

Це копіює вузли, дозволи, часові позначки пристрою. Я впевнений, що опція -H не буде точною з --files-from


23
Щоб встановити це як віддалений фільтр:rsync -avn --files-from=<(ssh user@A 'find /path/on/A/ -mtime -7 -type f -exec basename {} \;') user@A:/path/on/A/ user@B:targetdir
cybertoast

Я хочу додати виправлення до коментаря cybertoast. Можливо, його контекст відрізняється від мого, але я намагався витягнути файли з віддаленого сервера, враховуючи часові критерії. Отже, сервер A - це мій пункт призначення, а сервер B - це моє джерело, тоді: rsync -avn --files-from = <(ssh user @ A 'find / path / on / A / -mtime -7 -type f -exec basename {} \; ') користувач @ B: / / path / in / server / Помітьте, що лише джерело / для джерела. Thefiles-from піклується про відносний шлях для вас. Якщо у вас є сумніви, використовуйте man rsync та перегляньте розділ --files-from.
einarc

@cybertoast Що basenameозначає ваша команда? Можете пояснити, будь ласка?
Kemat Rochi

@KematRochi - "ім'я бази, ім'я dirname - повернення імені файлу або частини каталогу імені шляху". Сподіваюся, що це допомагає.
кіберстоаст

6

Я написав цей сценарій на основі коментаря cybertoast для синхронізації з віддаленого сервера на локальний.

Ви можете викликати скрипт з ./script.sh 3або ./script.sh 3 dryдля сухого ходу.

#!/bin/bash
TIME=$1
DRYRUN=$2

if [[ -z $TIME ]]; then
  echo "Error: no time argument."
  echo "Please enter the number of days to sync."
  exit 1
fi

if [[ $DRYRUN = "dry" ]]; then
  DRYRUNCMD="--dry-run"
  echo "Dry run initiated..."
fi

rsync -avz $DRYRUNCMD --files-from=<(ssh \
    user@remote "find path/to/data/ \
    -mtime -$TIME ! -name *.mkv -type f \
    -exec ls $(basename {}) \;") \
  user@remote:. .
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.