2009-01-04 13 views
5

Ben (OS X) o sürücü monte yalnızca ... harici bir sabit diske benim Yedekleme çalıştıran bu bash script var:rsync'e yalnızca hedef dizini varsa çalıştırılmasını söylerim?

DIR=/Volumes/External; 
if [ -e $DIR ]; 
then rsync -av ~/dir_to_backup $DIR; 
else echo "$DIR does not exist"; 
fi 

Bu çalışır, ancak ben rsync man sayfasını misreading seziyorum. Üst düzey hedef dizini yoksa, işi iptal etmek için yerleşik bir rsync seçeneği var mı?/Volumes/External varlığını test etmeden, henüz eklenmemişse bu adla bir dizin oluşturulacaktır. Adam sayfasından

--existing, --ignore-non-existing 

:

cevap

3

Bu iki bayrak size aradığınızı benziyor

--existing,
--ignore-var olmayan bu rsync'e Hedefte henüz bulunmayan dosyaları (dizinler dahil) oluşturmayı atlamak için Bu seçenek --ignore-varolan seçeneğiyle birleştirilirse, hiçbir dosya güncellenmez (tek yapmanız gereken, gereksiz dosyaları silmekse faydalı olabilir).

+0

--existing ile, kaynak hiyerarşisindeki yeni dizinleri hiçbir zaman yedek sürücüde oluşturulmayacak ... – mjy

+1

Evet, istediğim şekilde çalışamayacağım seçenekler bunlar. Koşma iptal edildiğinde bile, hedef dir bulunmuyorsa, hedef dir oluşturulur (ağaç kopyalanmadığı halde). – Marcus

2

bir AFAIK, ancak bir eğik çizgiyle behavour benzetilebilir:

rsync -av dir_to_backup /Volumes/External/;

dizini mevcut değilse, bu bir hata ile çıkış (veya arzu edilmeyebilir olabilir) .

Ayrıca, her zaman uzak optimize edebilirsiniz eğer:

test -e $DIR && rsync -av ...

+1

Doğru olması için ilk ifadeyi bulamıyorum. Dizin, izleyen eğik çizgiden bağımsız olarak oluşturulur. Varsayım testi için kabuk optimizasyonunu beğendim, eğer dizin mevcut değilse bazı hata çıktısı almak istiyorum, bu yüzden büyük olasılıkla verbose tutarım. – Marcus

1

Hayır, manpage görebileceğiniz kadarıyla, bu tür seçenek gibi görünmüyor.

İlgili konular