Rsync ile birden fazla dizin nasıl dışlanır?


184

Giriş dizini rsync kullanarak yedeklemeye çalışıyorum ve önemsiz içeren bazı dizinleri hariç tutmak istiyorum. Özellikle dışlamak istiyorum /home/ben/.ccacheve /home/ben/build. Ne yazık ki, rsync belgelerine bilgi yüklemesi yapıldı ve sorumu cevaplamadım. Bu denedim:

rsync -arv --exclude "/home/ben/.ccache:/home/ben/build" /home/ben /media/ben/thumbdrive/

Bunu yapmanın doğru yolu nedir?


4
Sadece bayrağın zaten aima ettiğini söylemek istedim r:)-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
Populus

Yanıtlar:


238

Tamam gerçekten aptal hissediyorum. Bu soruyu bile yayınlamadan önce arkadaşım bana nasıl yapabileceğimi gösterdi ve çok basit. Birden fazla dizini hariç tutmak için sadece birden çok --exclude=pathanahtar kullanın . Bu yüzden yukarıda benim doğru komutu yazılı olarak şöyle:

rsync -arv --exclude=.ccache --exclude=build /home/ben /media/ben/thumbdrive/

7
Mutlak bir yol vermedi değil kaynak dizinine bir yol göreli düzgün çalıştığı oysa bana (sessizce bertaraf edilmemiş Belirtilen dizin) için çalışıyorum. Belki bir şeyleri özlüyorum ama @FreeSoftwareServers'ın mutlak yolların her zaman işe yaradığı iddiası konusunda temkinli olurdum.
Soren Bjornstad

5
Bilginize: Seçenek -aiçerir -rböylece -argereksiz.
David

4
FreeSoftwareServers'in inandığının aksine, dışlama yolu kaynak yolla ilgilidir, NOT /. Bu nedenle, bu yorum kategorik olarak yanlıştır ve izlerseniz hatalara yol açacaktır. Bu tür bir zihinsel hatadan kaçınmak için en iyi strateji, dışlananlarınızda / dışlananlarınızda bırakmaktır. Kaynak söylenirse, / home / me ve = '/ mydir /' ifadesini hariç tutarsanız, / home / me dizinindeki mydir dizini hariç tutulur, yani / home / me / mydir NOT / mydir / at / dizinini hariç tutar. Bu talihsizdir Teknik yanlış olduğu ve yanlış yönlendireceği için bu yorumu reddedemiyorum veya düzenleyemiyorum.
Lizardx

3
FYI daha sonraki gezginler için, @ FreeSoftwareServer'ın söz konusu yorumu kaldırıldı. tl; dr: göreceli yolları kullan
Freedom_Ben 6:17

2
Eğer aptalsın o zaman ben ve 179 diğer failiyim!
Sridhar Sarnobat

108

Dışlanacak birden fazla klasör ve / veya dosya varken, bir metin dosyası yapın ve --exclude-fromanahtarı kullanın . Denilen bir dosya yapın exclude_me.txtve içindeki istisnalarınızı listeleyin. Örnek ( /home/ben/exclude_me.txt):

.ccache
build
.java
.gvfs
.xsession-errors

O zaman rsync'iniz şuna benzer:

rsync -arv --exclude-from='/home/ben/exclude_me.txt' /home/ben /media/ben/thumbdrive/

Bu yardımcı olabilecek filtre kuralları hakkında bazı bilgiler:

  • /dir/ kök klasörü dışlamak anlamına gelir /dir
  • /dir/*kök klasörü almak anlamına gelir /dirancak içeriği değil
  • dir/ , adın bulunduğu her yere herhangi bir klasörü dışlamak anlamına gelir dir/

  • Hariç tutulan örnekler: içindeki herhangi bir klasörle /dir/, /usr/share/directory/, /var/spool/dir/ /var/spool/lpd/cfbaşlayan dosyaları atlamak anlamına gelircf/var/spool/lpd

Ayrıca man sayfasındaki filtre kuralları bölümüne bakın.


4
Bu dikkat etmek önemlidir kök klasör anlamına transfer kökü değil kök dizin.
jamesdlin

Bu mükemmel bir cevap!
Alexander Zhukov

85

Kıvrımlı parantez içindeki birden fazla yolu da hariç tutabilirsiniz:

rsync -arv --exclude={.ccache,build} /home/ben /media/ben/thumbdrive/

40
Bu güzel çalışır, sadece sh altında değil, sadece bash altında, "zor yoldan" öğrendim
xor

7
Virgülünden sonra boşluk yok. Çok zor yoldan da öğrendim styl
styl3r

Ve '' like --exclude = '. Gvfs' kullanmayın
Martin T.

FWIW, kaşlı ayraçların ksh ile çalıştığını düşünüyorum. Diğer kabukları için, muhtemelen böyle bir şey kullanabilirsiniz IFS=$'\n'; rsync -arv $(printf '.ccache\nbuild\n' | sed 's/^/--exclude=/g') /home/ben /media/ben/thumbdrive/. Veya, yalnızca --excludeel ile yazmanız gereken birden çok argüman kullanabilirsiniz .
TSJNachos117

1
Bunun işe yaramasının sebebi, herhangi birinin ayrıntılara bakmak istemesi durumunda "Brace Expansion" nedeniyle.
shredalert
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.