2012-06-20 23 views
39

Yalnızca belirli uzantıdaki dosyaları kopyalamak için şu bash komut dosyasını kullanıyorum (bu durumda * .sh), ancak yine de tüm dosyaları kopyalamaktadır. Sorun nedir?rsync kopyalama seçeneğini kullanarak yalnızca belirli dosya türlerini kopyala seçeneğini kullanın

 
from=$1 
to=$2 

rsync -zarv --include="*.sh" $from $to 
+3

kullanmanız gerekirse, G/$ ila $ alıntı öneririm. Eğer konumsal argümanlar 1/2 boşluk içeriyorsa bunu yapmak beklenmedik sonuçlar verebilir. –

cevap

63

bence --include aksi ziyade sadece bu dosyaları da dahil olmak üzere daha --exclude tarafından dışlanır dosyaların bir alt kümesini içerecek şekilde kullanılır.

yerine deneyin:

rsync -zarv --include "*/" --exclude="*" --include="*.sh" "$from" "$to" 

GÜNCELLEME: şöyle 3.0.7 daha yüksek rsync sürümü için

, sipariş (yorum görmek)

rsync -zarv --include="*/" --include="*.sh" --exclude="*" "$from" "$to" 

değiştirilmesi gerekiyor UPDATE
'-m' bayrağı ekleme, Hedefte boş dizin yapıları oluşturma id. 3.1.2 sürümünde test edildi.

+9

Tüm alt dizinleri alırken, alt dizinlerde rsync istediğiniz herhangi bir .sh dosyası varsa, olasılıkla --include = "* /" kullanmak isteyeceksiniz. –

+34

Bunu çok önce macports'tan aldığım rsync 3.0.7 sürümünde denedim ve bu/include içermeleriyle çalışmadı. Bu benim için çalıştı (OP için uyarlanmış) ile bitti: rsync -zarv --include = "* /" --include = "*. Sh" --exclude = "*" "$ from" " $ için "'. –

+0

Bijou'nun önerisi işe yarıyor. Cevap lütfen güncellenebilir mi? – Jepper

8

Bir daha eklenmesi: Eğer yılında uzantıları tarafından dosyaları senkronize etmek gerekirse bir tek Böyle bir inşaat kullanmalıdır (özyineleme olmadan) dir: nokta içinde dikkatinizi Pay

rsync -auzv --include './' --include '.ext' --exclude '*' /source/dir/ /destination/dir/ 

İlk --include. Bu yapımda --no-r çalışmıyor.

21

@chepner tarafından verilen yanıt, dosya içerip içermediğine bakılmaksızın tüm alt dizinleri kopyalayacaktır. Dosyayı ihtiva yok alt dizinleri dışlamak ve hala dizin yapısını korumak yapılıp yapılmadığı ilgili konuşan olmasa da

rsync -zarv --prune-empty-dirs --include "*/" --include="*.sh" --exclude="*" "$from" "$to" 
+0

Bu cevap benim için mükemmel çalıştı. +1 :) – Terry

+1

Bu benim için bir gereklilikti: "Dosyayı içermeyen ve dizin yapısını hala koruyan alt dizinleri hariç tutmanız gerekiyor" +1 –

İlgili konular