rsync sadece belirli bir dizin alt kümesi


4

Bir rsync sunucusundan birkaç dizini senkronize etmek için rsync kullanmam gerekiyor. Bütün rsync modülü oldukça büyük ve diğer, gerekli olmayan parçaların üstesinden gelmekten de kaçınmayı seviyorum.

İstenen dizinleri metin dosyası olarak aldım ancak uygun bir filtre kural dosyası oluştururken sorun yaşıyorum. Gereksinimlerim aşağıdaki gibidir:

  • Listemde yalnızca dizinleri, içindeki tüm dosyalar ve alt dizinlerle birlikte ekleyin.
  • Dahil edilen dizinlerdeki dosyalar sunucuda silinirse silinmelidir.
  • Ancak .hgsitemde bulunan ancak sunucuda bulunmayan tüm dizinler (Mercurial deposu) ve içindeki tüm dosyalar ve alt dizinler silinmemelidir.
  • Dışlanan dizinler silinmemelidir.

Şimdiye kadar böyle görünen bir filtre dosyası oluşturdum

include sub/dir/I/want/***
include other/sub/dir/I/want/***
...
protect .hg/***
exclude **

Ancak bu görünüşte her şeyi dışlar. excludeÇizgi olmadan diğer tüm dosyalar da dahil edilir.

Yanıtlar:


2

Sorunu buldum. Sorunlarım neden rsyncdosya isimlerini işliyor olmasından kaynaklanıyor. Mutlak (örneğin, aktarma köküne göreceli), ana dizinlerin de dahil edilmesi gerektiği için yolu doğrudan çalışmaz. Aksi takdirde, tüm dizin yapısı zaten dışlanır ve istenen dosya veya alt dizin asla işlenmez. Manuel gerçek öyle diyor (bir yerlerde) ama oldukça sezgisel.

Yalnızca belirli alt dizinleri dahil etmek için, tüm üst dizinler dahil edilmeli ve diğer tüm alt dizinler tekrar dışlanmalıdır:

include sub/
include sub/dir/
include sub/dir/I/
include sub/dir/I/want/***
exclude sub/*
exclude sub/dir/*
exclude sub/dir/I/*

include other/
include other/sub/
include other/sub/dir/
include other/sub/dir/I/
include other/sub/dir/I/want/***
exclude other/*
exclude other/sub/*
exclude other/sub/dir/*
exclude other/sub/dir/I/*

...

protect .hg*
exclude /*

İkinci son satır tüm koruyan .hg*dizinleri ve benzeri dosyaları .hg/ve .hgtags. Satır, transfer kökündeki diğer tüm dizinleri hariç tutar.

Yukarıdaki filtre dosyasını istenen alt dizinler listesinden üretmek için bir Perl betiği yazdım. Http://www.perlmonks.org/?node_id=928357 adresinden erişilebilir .


0

Rsync'i iki kez çalıştırın.

rsync hostname::sub/dir/I/want/        ./sub/dir/I/want/
rsync hostname::other/sub/dir/I/want/  ./other/sub/dir/I/want/

1
İstediğim 2000'den fazla alt dizine sahibim, bu yüzden bu bir seçenek değil.
Martin Scharrer
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.