2011-10-12 27 views
8

Can Rsync, dosyaların içeriğini senkronize edilmeden önce doğrulamak üzere yapılandırılabilir. Checksum'u duydum, ama sağlama toplamının sadece bir örneklem olduğunu biliyordum. Bir dosya sadece içerik değiştiyse ve zaman damgası değilse, rsync modlarından herhangi biri ile yapmanın bir yolu varsa, aktarmak istiyorum. Benim senaryoda, her hafta örnek sample.text dosyası oluşturulacak ve her hafta oluşturulduğu için, zaman damgası açıkça değişeceğinden, yalnızca sample.text içeriği değiştirildiyse, uzak bir sunucu ile senkronize etmek istiyorum. Ancak aktarımı sadece içerik değişikliğinde istiyorum.Senkronizasyondan önce içeriği doğrulamak rsync

+0

rsync'in man sayfasını denediniz mi? -c, --checksum Bu, dosyaların değişip değişmediğini ve aktarım gerektirip gerektirmediğini rsync kontrol eder. Bu seçenek olmadan, rsync bir "hızlı kontrol" kullanır (varsayılan olarak), her dosyanın boyutunun ve son değişiklik zamanının gönderici ve alıcı arasında eşleşip eşleşmediğini kontrol eder. –

cevap

23

Evet, kılavuzu okumalısınız.

$ man rsync | grep "\--checksum" 
    -c, --checksum    skip based on checksum, not mod-time & size 

Rsync oldukça karmaşıktır. Man sayfasıyla test edilmesini ve test verileri ile deney yapılmasını öneriyorum, uzaktan önemli bir şey için kullanmadan önce.

Çoğu zaman, insanlar rsync -ac source dest'u kullanır.

$ man rsync | grep "\--archive" 
-a, --archive    archive mode; same as -rlptgoD (no -H) 

Ve bu -rlptgoD çöp gelir: recursive, copy symlinks as symlinks, preserve permissions, preserve times, preserve group, preserve owner, preserve device files (super-user only), preserve special files ve skip based on checksum, not mod-time & size

-c veya --checksum aradığınız ve Zannını ne gerçekten Sadece mtime ve boyut örnekleri yanlıştır.

+3

+ adam sayfası ve test verileri ile deneme ile _cuddle zamanı için - Son derece iyi tavsiye –

8

rsync man sayfasındaki --checksum seçeneğine bakın.

Ayrıca, içerik değişiminin de boyut değişikliği anlamına geldiğinden emin olursanız --size-only seçeneği daha hızlı bir seçim olacaktır.

0

Örnek:

#!/bin/bash 
echo > diff.txt 
rsync -rvcn --delete /source/ /destination/ > diff.txt 
second_row=$(sed -n '2p' diff.txt) 
if [ "$second_row" = "" ]; then 
    echo there was no change 
else 
    echo there was change 
fi 
+1

Bu kodun neden işe yaradığı konusunda gerçekten bir açıklama eklemelisiniz - aynı zamanda kodun kendisinde de yorum ekleyebilirsiniz - mevcut haliyle, Sorunun cevabını çözmek için ne yaptığınızı anlamak için topluluğun geri kalan kısmına yardımcı olabilecek herhangi bir açıklama yapmayın. – ishmaelMakitla

+0

Hiçbir değişiklik yoksa, rsync'nin gerçek modda diff.txt ikinci satırı boş, sed bu ikinci satırı inceleyin. – oldbowman

İlgili konular