file rsync lebih baru dari 1 minggu

24

Saya ingin menjalankan rsync di server A untuk menyalin semua file dari Server B ketika mereka lebih baru dari 7 hari.

find . -mtime -7

Saya tidak ingin menghapus file di Server B.

mm1
sumber
b) seberapa sering Anda menjalankan rsync?

Jawaban:

30

Ini akan membuat Anda berjalan dengan solid

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

Perangkat ini menyalin node, izin, cap waktu. Saya cukup yakin opsi -H tidak akan akurat dengan --files-from

lihat
sumber
23
Untuk menetapkan itu sebagai filter jarak jauh: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
Saya ingin menambahkan koreksi untuk komentar cybertoast. Mungkin konteksnya berbeda dengan milik saya, tetapi saya mencoba mengekstrak file sederhana dari server jauh dengan kriteria waktu. Jadi, server A adalah tujuan saya dan server B adalah sumber saya, kemudian: rsync -avn --files-from = <(ssh user @ A 'find / path / on / A / -mtime -7 -type f -exec basename {} \; ') pengguna @ B: / / path / in / server / A Pemberitahuan hanya ada sumber terkemuka / untuk. --Files-from merawat jalur relatif untuk Anda. Jika Anda ragu gunakan man rsync dan lihat bagian --files-from.
einarc
@cybertoast Apa basenameartinya dalam perintah Anda? Bisakah Anda jelaskan?
Kemat Rochi
@KematRochi - "basename, dirname - mengembalikan nama file atau bagian direktori dari pathname". Semoga itu bisa membantu.
cybertoast
6

Saya menulis skrip ini berdasarkan komentar cybertoast untuk melakukan sinkronisasi dari server jauh ke lokal.

Anda dapat memanggil skrip dengan ./script.sh 3atau ./script.sh 3 dryuntuk lari kering.

#!/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
sumber