rsync
İki kez çalıştırmanız gerekiyor ve şu şekilde çalıştırmanızı öneririm -au
:
rsync -au /local/source/* /remote/destination
rsync -au /remote/destination/* /local/source
-a
(bir arşiv için) şunun kısayoludur -rlptgoD
:
-r
Alt dizinlere tekrarlayın
-l
Ayrıca sembolik bağlantıları da senkronize et
-p
Dosya izinlerini de senkronize et
-t
Ayrıca dosya değişiklik zamanlarını da senkronize et
-g
Dosya gruplarını da senkronize et
-o
Dosya sahibini de senkronize et
-D
Ayrıca özel (normal / meta değil) dosyaları senkronize edin
Temel olarak, kullanarak aynı bire bir kopya oluşturmak istediğinizde rsync
, her zaman kullanmalısınız -a
, çünkü çoğu kullanıcı " senkronizasyon " hakkında konuşurken olmasını beklediği şey budur . Buradaki diğer yanıtlar, bazen bir dosyanın içeriğinin değişmeden kaldığını, ancak sahibinin değişmiş olabileceğini veya erişim izinlerinin değişmiş olabileceğini ve bu durumda rsync
ölümcül olabilecek dosyayı senkronize etmeyeceğini göz ardı ediyor gibi görünüyor .
Ancak bu, hedefte zaten mevcut olması ve daha yeni bir son değişiklik tarihine sahip olması durumunda, herhangi bir dosyayı / klasörü tamamen bırakmanızı -u
söyler rsync
. Olmadan -u
rsync
, bir dosya / klasör daha yeni olsa da olmasa da senkronize olur .
Lütfen bu çözümün silinen dosyaları işleyemeyeceğini unutmayın. Aşağıdaki durum göz önüne alındığında, silme işlemlerinin işlenmesi kolay bir şekilde mümkün değildir: Bir dosya kaynakta silinmiştir, şimdi rsync
o dosyanın daha önce var olup olmadığını ve silinip silinmediğini (bu durumda hedefte de silinmesi gerekir) nasıl anlaşılacaktır? kaynakta hiç var olmadı (bu durumda hedeften kopyalanması gerekir). Bu iki durum aynı göründüğünden rsync
nasıl doğru tepki vereceğini bilemez. Aynı duruma yol açabileceğinden, tam tersini senkronize etmenin bir faydası olmayacaktır: Kaynakta bir dosya vardır, ancak hedefte yoktur. Neden? Hedefte hiç var olmadı mı veya silinmiş mi? Her iki durum da aynı görünüyor rsync
.
Silinen dosyaları güvenilir bir şekilde senkronize edebilen senkronizasyon araçları, genellikle tüm geçmiş senkronizasyon işlemleriyle ilgili bir senkronizasyon günlüğünü yönetir. Bu günlük bir zamanlar bir dosya olduğunu ve senkronize edildiğini gösteriyorsa ancak şimdi eksikse, silinmiş olduğu açıktır. Günlüğe göre böyle bir dosya hiç olmadıysa, senkronize edilmesi gerekir. Tüm günlük girişlerini zaman damgalarıyla depolayarak, silinen bir dosyanın geri gelip birden çok kez silinmesi bile mümkündür, ancak senkronizasyon aracı her zaman ne yapılacağını bilir ve sonuç her zaman doğrudur. rsync
böyle bir günlüğü yoktur, yalnızca işlemin iki tarafının mevcut dosya durumuna bağlıdır.
Ancak rsync
, yukarıda açıklandığı gibi zaten bir senkronizasyon aracına çok yakın olan bir bit POSIX kabuk komut dosyası kullanarak kendinize bir senkronizasyon komutu oluşturabilirsiniz . Ben de böyle bir araca ihtiyacım olduğu için , işte size Stackoverflow'da böyle bir komut dosyası oluştururken rehberlik edecek bir cevap .