file rsync più recenti di 1 settimana


24

Voglio eseguire rsync sul server A per copiare tutti i file dal server B quando sono più recenti di 7 giorni.

find . -mtime -7

Non voglio cancellare i file sul Server B.


b) con quale frequenza esegui rsync?

Risposte:


30

Questo dovrebbe farti iniziare in modo solido

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

Copia i nodi del dispositivo, le autorizzazioni, i timestamp. Sono abbastanza sicuro che l'opzione -H non sarà accurata con --files-from


23
Per impostarlo come filtro remoto: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,

Voglio aggiungere una correzione per il commento di cybertoast. Forse il suo contesto è diverso dal mio ma stavo cercando di estrarre i file da un server remoto dati i criteri temporali. Quindi, il server A è la mia destinazione e il server B è la mia fonte, quindi: rsync -avn --files-from = <(utente ssh @ A 'find / path / on / A / -mtime -7 -type f -exec basename {} \; ') user @ B: / / path / in / server / A Notare che c'è solo un lead / for source. --Files-from si occupa del percorso relativo per te. Se hai dei dubbi usa man rsync e vedi la sezione --files-from.
einarc,

@cybertoast Cosa basenamesignifica nel tuo comando? Puoi spiegare per favore?
Kemat Rochi,

@KematRochi - "basename, dirname - restituisce il nome del file o la parte della directory del nome percorso". Spero che sia d'aiuto.
cybertoast,

6

Ho scritto questo script in base al commento di Cybertoast per la sincronizzazione da un server remoto a locale.

Puoi chiamare lo script con ./script.sh 3o ./script.sh 3 dryper una corsa a secco.

#!/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:. .
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.