Karmaşık rsync içeren / hariç tutanlar


14

Karmaşık dahil / dışlar gerçekleştirmek için rsync filtre sözdizimi çalışmaya çalışıyorum ve aşağıdaki elde etmeye çalışıyorum:

Include /
Exclude /home
Include /home/user1/*
Include /home/user2/subdir/*

Filtre sözdiziminde birçok varyasyon denedim ve man sayfasını birçok kez okumaya rağmen, bu tür bir etki elde edemiyorum. Rsync filtreleri çok güçlü görünüyor ve bunun gibi ortak bir senaryoyu ele alamayacaklarına inanmakta zorlanıyorum.

Yanıtlar:


17

Hariç tutma kuralını kullanmadan önce tüm üst dizinleri istediğiniz dizine eklemeniz gerekir.

Örneğin, bir yedekleme komut dosyasında aşağıdakileri kullanıyorum:

rsync -av \ 
--filter='+ /var/' \
--filter='+ /var/backups/' \
--filter='- /var/*' \
/ \
$DEST

Yani sizin durumunuzda aşağıdaki gibi bir şeye ihtiyacınız olacak:

rsync -av \ 
--filter='+ /home/' \
--filter='+ /home/user1/' \
--filter='+ /home/user2/' \
--filter='+ /home/user2/subdir/' \
--filter='- /home/user2/*' \
--filter='- /home/*' \
/ \
$DEST

Mükemmel. Bana biraz zaman ayırdı.
yclian

Her nasılsa, okuduğumda, man rsyncuygun karıştırma sırasını içerir ve hariç tutar.
Anlamak

6

Komut satırında:

rsync --dry-run --verbose --recursive --include=/home/user1 --exclude=/home/* / DEST

Kaldır --dry-rungerekirse "/" kaynağına gideceğiniz ile "DEST" ve eklemek kullanıcı ve ev sahibi yerine, fonksiyonel hale getirmek.

Bir kural dosyasından:

rsync --dry-run --verbose --recursive --filter='merge /etc/rsync/somerules.rules' / DEST

içeriği /etc/rsync/somerules.rules:

+/ /home/user1
-/ /home/*

Bunları test etmelisiniz ve bazı ayarlamalar yapmanız gerekebilir, ancak bu başlamanıza yardımcı olacaktır.


Tamam, işe yarıyor. Soruya eklediğim daha karmaşık bir durum var. Ek içerme, alt dizin senaryosuyla çalışmaz.
brianmathis
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.