Pliki rsync nowsze niż 1 tydzień

24

Chcę uruchomić rsync na serwerze A, aby skopiować wszystkie pliki z serwera B, gdy są one nowsze niż 7 dni.

find . -mtime -7

Nie chcę usuwać plików z serwera B.

mm1
źródło
b) jak często korzystasz z rsync?

Odpowiedzi:

30

To powinno cię solidnie rozpocząć

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

Kopiuje węzły urządzeń, uprawnienia, znaczniki czasu. Jestem prawie pewien, że opcja -H nie będzie dokładna z opcją --files-from

sehe
źródło
23
Aby ustawić to jako filtr zdalny: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
Chcę dodać poprawkę do komentarza cybertoast. Być może jego kontekst różni się od mojego, ale starałem się po prostu wyodrębnić pliki ze zdalnego serwera, biorąc pod uwagę kryteria czasowe. Tak więc serwer A jest moim miejscem docelowym, a serwer B jest moim źródłem, a następnie: rsync -avn --files-from = <(ssh użytkownik @ A 'find / path / on / A / -mtime -7 -type f -exec basename {} \; ') użytkownik @ B: / / path / in / server / A Zauważ, że jest tylko wiodące / źródło. Plik --files-from dba o ścieżkę względną. Jeśli masz wątpliwości, użyj man rsync i zobacz sekcję --files-from.
einarc
@cybertoast Co basenameoznacza twoje polecenie? Czy możesz to wyjaśnić?
Kemat Rochi
@KematRochi - "basename, dirname - zwraca nazwę pliku lub część ścieżki do katalogu". Mam nadzieję, że to pomaga.
cybertoast
6

Napisałem ten skrypt na podstawie komentarza cybertoast do synchronizacji ze zdalnego serwera na lokalny.

Możesz wywołać skrypt za pomocą ./script.sh 3lub ./script.sh 3 drydla suchego uruchomienia.

#!/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:. .
Rohmer
źródło