fichiers rsync plus récents que 1 semaine


24

Je veux exécuter rsync sur le serveur A pour copier tous les fichiers du serveur B lorsqu'ils sont plus récents que 7 jours.

find . -mtime -7

Je ne veux pas supprimer les fichiers sur le serveur B.


b) à quelle fréquence exécutez-vous rsync?

Réponses:


30

Cela devrait vous permettre de démarrer de manière solide

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

Cela copie les nœuds de périphérique, les autorisations et les horodatages. Je suis sûr que l'option -H ne sera pas précise avec --files-from


23
Pour définir cela comme un filtre distant: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

Je veux ajouter une correction pour le commentaire de cybertoast. Peut-être le contexte sur son différent du mien mais j'essayais d'extraire simplement des fichiers à partir d'un serveur distant compte tenu des critères de temps. Donc, le serveur A est ma destination et le serveur B est ma source, alors: rsync -avn --files-from = <(ssh user @ A 'find / path / on / A / -mtime -7 -type f -exec basename {} \; ') user @ B: / / chemin / dans / serveur / A Remarquez qu'il n'y a qu'une source / pour la source. Le --files-from s'occupe du chemin relatif pour vous. Si vous avez des doutes, utilisez man rsync et consultez la section --files-from.
einarc

@cybertoast Que basenamesignifie votre commande? Pouvez-vous expliquer s'il vous plaît?
Kemat Rochi

@KematRochi - "nom de base, dirname - retourne le nom de fichier ou la partie répertoire du chemin". J'espère que ça t'as aidé.
cybertoast

6

J'ai écrit ce script basé sur le commentaire de cybertoast à synchroniser d'un serveur distant vers un serveur local.

Vous pouvez appeler le script avec ./script.sh 3ou ./script.sh 3 drypour un essai à sec.

#!/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:. .
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.