İki klasörün otomatik olarak eşitlenmesi nasıl sağlanır?


92

Bir klasörün tüm alt ağacıyla birlikte senkronize edilmiş bir kopyasına sahip olmak istiyorum.

Otomatik olarak şu şekilde çalışmalıdır: orijinal klasörden bir şeyler oluşturduğum, değiştirdiğimde veya sildiğimde, bu değişiklikler otomatik olarak sync klasörüne uygulanmalıdır.

Bu göreve en iyi yaklaşım hangisidir?

BTW: Ubuntu 12.04'teyim

Nihai hedef, sembolik bağlantılar veya bağlantı kullanmadan ayrı bir gerçek zamanlı yedek kopyaya sahip olmaktır. Bilgisayarlarım arasında verileri senkronize etmek için Ubuntu One kullandım ve bir süre sonra bir şeyler ters gitti ve senkronizasyon sırasında tüm verilerim kayboldu.

Bu yüzden verilerimin yedek bir kopyasını saklamak için bir adım daha eklemeyi düşündüm:

  • Verilerimi bir "klasör A" da saklıyorum
  • "Klasör A" ile "Klasör B" arasında tek yönlü bir senkronizasyon oluşturmak için mevcut sorumun cevabına ihtiyacım var ( cronbir komut dosyası rsync? Olabilir mi?). Sadece A'dan B'ye tek yönlü olmasına ihtiyacım var, B'deki herhangi bir değişiklik A'ya uygulanmamalıdır.
  • Ubuntu One ile senkronize edilmiş "B klasörünü"

    tutuyorum Bu şekilde, A'daki herhangi bir değişiklik, U1'den algılanacak ve buluta senkronize edilecek olan B'ye uygulanacaktır. Bir şeyler ters giderse ve U1 verilerimi B üzerinde silerse, onları her zaman A'da tutarım.

Lanzz'ın yorumlarından esinlenerek, Ubuntu One altındaki bir klasörün içeriğini yedeklemek için başlangıçta rsync çalıştırmak ve Ubuntu One'ı yalnızca rsync tamamlandıktan sonra başlatmak başka bir fikir olabilir.

Bunun hakkında ne düşünüyorsun? Rsync'in ne zaman bittiğini nasıl anlarım?


Neyi başarmaya çalışıyorsun? Klasörlerin gerçekten ayrı olması gerekiyor mu, bir adı diğerine sembolik bağlayamaz mısınız veya dizini ikincil konuma bağlayamaz mısınız? Ayrıca, bu arama sonuçlarına bir göz atın .
lanzz

1
Güncel canlı senkronizasyona karşı tavsiyede bulunuyorum (yani kaynak dizindeki dosya değişikliklerini sürekli olarak izlemek) rsynccron aracılığıyla periyodik lehine .
lanzz

Yanıtlar:


103

Sen kullanabilirsiniz inotifywait(ile modify,create,delete,movebayraklar etkin) ve rsync.

while inotifywait -r -e modify,create,delete,move /directory; do
    rsync -avz /directory /target
done

inotifywaitSisteminizde yoksa , çalıştırınsudo apt-get install inotify-tools


3
Sen eklemek için dikkate isteyebilirsin -e ssh user@remote:/targetiçin rsyncsize uzak makineye erişmek ulaşım gibi SSH kullanmak istiyorum.
Falcon

2
Teşekkürler @ Falcon, genellikle kullanırım rsync -avz --delete --exclude-from=.rsyncignore /directory user@server:path. Ancak basit bir cevap yazmak istedim.
silgon

5
açıklığa kavuşturmak için: bu tek seferlik bir şey mi, yoksa bunu bir bashrc'e mi eklersiniz?
Brad Johnson

1
Tüm while döngüsünü, gerektiğinde senkronize olan bir işlem olarak düşünebilirsiniz. Genellikle üzerinde çalıştığım projenin Makefile dosyasına eklerim. Bu şekilde sunucuyu ve kaydedilmesini istediğim dizini seçebilirim. Kullanım durumlarımdan biri, dizüstü bilgisayarımda derin öğrenme algoritmalarını programladığımda ve daha iyi CPU ve GPU'ya sahip özel bir bilgisayarda ağır işlemi gerçekleştirmek için senkronize ettiğim zamandır. .gitKlasör gibi ihtiyacım olmayan dosyaları da hariç tutuyorum.
silgon

2
Bu dosya yeniden modify,create,delete,move
adlarını

25

Bunun gibi bir şeye ihtiyacınız var: https://github.com/axkibe/lsyncd Bu, rsync ve inotify'ı birleştiren bir araçtır - birincisi, doğru seçenekler kümesiyle son bitine bir dizini yansıtan bir araçtır. İkincisi, çekirdeğe bir dosyadaki bir dizindeki değişiklikleri bir programa bildirmesini söyler. Diyor ki:

Olayları birkaç saniyeliğine toplar ve birleştirir ve ardından değişiklikleri senkronize etmek için bir (veya daha fazla) işlem (ler) oluşturur.

Ancak - https://www.digitalocean.com/community/tutorials/how-to-mirror-local-and-remote-directories-on-a-vps-with-lsyncd adresindeki Digital Ocean'a göre - içinde olması gerekir Ubuntu deposu!

Benzer gereksinimlerim var ve henüz denemediğim bu araç görev için uygun görünüyor.


1
lsyncd ilk bakışta sihirli bir değnek gibi görünüyordu, ancak birçok açık sorunu var ve görünüşe göre macOS uygulaması "eski ve modası geçmiş". 10.12'de çalışmasını sağlayamadım.
ücretli bir inek

@apaidnerd Adil olmak gerekirse, 90 sayı açık, 420 kapalı. Yine de geçen yıl yalnızca 10/40 sayı kapatıldı.
Mateen Ulhaq

8

@Silgon cevabının basit bir şekilde değiştirilmesi:

while true; do 
  inotifywait -r -e modify,create,delete /directory
  rsync -avz /directory /target
done

(@silgon sürümü, cron'da çalıştırırsanız bazen Ubuntu 16'da çöküyor)


2
Neden cron'da çalıştırıyorsun?
saygley

@saygley Belirli bir görev için, Ubuntu yeniden başlatıldıktan sonra senkronizasyon işlemi otomatik olarak çalıştırılmalıdır
Denis Kuzin

5
Anlıyorum .. Yine de, bu normalde bir kez başlatılması ve sunucu açık olduğu sürece çalışması gerektiğinden; Bunun yerine rc.local içinde satır içi bir şey düşünürdüm.
saygley

2

Fschange avantajlarından yararlanabilirsiniz . Bu bir Linux dosya sistemi değişiklik bildirimi. Kaynak kodu yukarıdaki bağlantıdan indirilebilir, kendiniz derleyebilirsiniz. fschangeproc dosyasından (/ proc / fschange) veri okuyarak dosya değişikliklerini takip etmek için kullanılabilir. Veriler bir dosyaya yazıldığında, fschange sadece dosyanın değiştirildiğini söylemek yerine değiştirilen tam aralığı bildirir. Daha gelişmiş bir çözüm arıyorsanız, Resilio Connect'i kontrol etmenizi öneririm . Çapraz platformdur, kullanım ve izleme için genişletilmiş seçenekler sunar. BitTorrent tabanlı olduğundan, mevcut diğer senkronizasyon araçlarından daha hızlıdır. Onların adına yazılmıştır.


0

Yerel dosyaları ve dizinleri senkronize etmek için bu ücretsiz programı kullanıyorum: https://github.com/Fitus/Zaloha.sh . Depo aynı zamanda basit bir demo içerir.

İyi nokta: Bu bir bash kabuğu betiğidir (yalnızca bir dosya). Diğer programlar gibi kara kutu değil. Belgeler de var. Ayrıca, bazı teknik yeteneklerle, beğendiğiniz nihai çözümü oluşturmak için onu "bükebilir" ve "entegre edebilirsiniz".

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.