Rsync-Dateien neuer als 1 Woche


24

Ich möchte rsync auf Server A ausführen, um alle Dateien von Server B zu kopieren, wenn sie neuer als 7 Tage sind.

find . -mtime -7

Ich möchte die Dateien auf Server B nicht löschen.


b) Wie oft führen Sie rsync aus?

Antworten:


30

Dies sollte Sie auf solide Weise in Gang bringen

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

Dadurch werden Geräteknoten, Berechtigungen und Zeitstempel kopiert. Ich bin mir ziemlich sicher, dass die Option -H bei --files-from nicht korrekt ist


23
So legen Sie dies als Remote-Filter fest: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

Ich möchte eine Korrektur für den Kommentar von Cybertoast hinzufügen. Vielleicht unterscheidet sich der Kontext von meinem, aber ich habe versucht, Dateien anhand der Zeitkriterien einfach von einem Remote-Server zu extrahieren. Also ist Server A mein Ziel und Server B meine Quelle, dann: rsync -avn --files-from = <(SSH-Benutzer @ A 'find / path / on / A / -mtime -7 -type f -exec basename {} \; ') Benutzer @ B: / / Pfad / in / Server / A Hinweis: Es gibt nur ein führendes / für die Quelle. Das --files-from kümmert sich für Sie um den relativen Pfad. Wenn Sie Zweifel haben, verwenden Sie man rsync und lesen Sie den Abschnitt --files-from.
— Einarc

@cybertoast Was basenamebedeutet in Ihrem Befehl? Kannst du bitte erklären?
— Kemat Rochi

@KematRochi - "basename, dirname - Dateiname oder Verzeichnisanteil des Pfadnamens zurückgeben". Hoffentlich hilft das.
— Cybertoast

6

Ich habe dieses Skript basierend auf dem Kommentar von cybertoast geschrieben, mit dem von einem Remote-Server auf lokal synchronisiert werden soll.

Sie können das Skript mit ./script.sh 3oder ./script.sh 3 dryfür einen Probelauf aufrufen .

#!/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:. .
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.