1 haftadan daha yeni rsync dosyaları


24

Tüm dosyaları 7 günden daha yeni olduklarında Sunucu B'den kopyalamak için A sunucusunda rsync çalıştırmak istiyorum.

find . -mtime -7

Sunucu B'deki dosyaları silmek istemiyorum.


b) ne sıklıkta rsync kullanıyorsunuz?

Yanıtlar:


30

Bu sizi sağlam bir yoldan başlatmalı

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

Bu, aygıt düğümlerini, izinleri, zaman damgalarını kopyalar. -H seçeneğinin - file-from ile doğru olmayacağından eminim.


23
Bunu uzak bir filtre olarak ayarlamak için: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,

Cybertoast'ın yorumu için bir düzeltme eklemek istiyorum. Belki de benimkiyle ilgili bağlamı farklı ama zaman ölçütleri göz önüne alındığında uzaktaki bir sunucudan basit dosya ayıklamaya çalışıyordum. Yani, sunucu A benim hedefim ve sunucu B benim kaynağım, o zaman: rsync -avn --files-from = <(ssh kullanıcısı @ A '/ yolu bul / on / A / -mtime -7 -type f -exec basename {} \; ') user @ B: / / path / in / server / A Yalnızca bir kaynak / kaynak olduğuna dikkat edin. -Files-from göreceli yol sizin için önemser. Eğer şüpheniz varsa, man rsync kullanın ve --files-from bölümüne bakın.
einarc

@cybertoast Komutunuzda ne anlama basenamegeliyor? Açıklayabilir misiniz lütfen?
Kemat Rochi,

@KematRochi - "basename, dirname - dosya adı veya yol adının dizini döndür". Umarım yardımcı olur.
Cybertoast

6

Bu betiği, cybertoast'ın uzak bir sunucudan yerel sisteme eşitleme yorumuna dayanarak yazdım.

Komut dosyasını kuru çalışma için ./script.sh 3veya ile ./script.sh 3 dryçalıştırabilirsiniz.

#!/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:. .
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.