TL, DR:
rsync -am --include='*.pdf' --include='*/' --exclude='*' ~/LaTeX/ ~/Output/
Rsync kaynakları hedeflere kopyalar. Kaynak *.pdf
olarak iletirseniz, kabuk bunu .pdf
geçerli dizinde bulunan dosya listesine genişletir . Hiçbir özyinelemeli geçiş olmaz, çünkü herhangi bir dizini kaynak olarak geçmediniz.
Bu yüzden çalıştırmanız gerekir rsync -a ~/LaTeX/ ~/Output/
, ancak rsync'e .pdf
yalnızca dosyaları kopyalamasını bildiren bir filtre ile . Kılavuzu okuduğunuzda Rsync'in filtre kuralları göz korkutucu görünebilir, ancak yalnızca birkaç basit kuralla birçok örnek oluşturabilirsiniz.
Kapsama alınan terimler ve dışlamalar:
- Ada veya konuma göre dosyaları hariç kolaydır:
--exclude=*~
, --exclude=/some/relative/location
(örneğin bu hariç tutar kaynak argüman göreli ~/LaTeX/some/relative/location
).
- Yalnızca birkaç dosya veya konumla eşleşmek istiyorsanız, onları dahil edin, bunlara yol açan her dizini (örneğin ile
--include=*/
) dahil edin, sonra diğerlerini hariç tutun --exclude='*'
. Bunun nedeni ise:
- Bir dizini hariç tutarsanız, bu altındaki her şeyi hariç tutar. Dışlanan dosyalar hiç dikkate alınmayacak.
- Bir dizin eklerseniz, bu otomatik olarak içeriğini içermez. Son sürümlerde,
--include='directory/***'
bunu yapacak.
- Her dosya için ilk eşleme kuralı uygulanır (ve hiçbir zaman eşleşmeyen herhangi bir şey dahil edilir).
desenler:
- Bir model a içermiyorsa
/
, sans dizini dosya adına uygulanır.
- Bir model ile sona ererse
/
, yalnızca dizinlere uygulanır.
- Bir model ile başlarsa
/
, argüman olarak geçirilen dizindeki tüm yola uygulanır rsync
.
*
tek bir dizin bileşeninin herhangi bir alt dizini (yani hiçbir zaman eşleşmez /
); **
herhangi bir yol alt dizgisiyle eşleşir.
Bir kaynak bağımsız değişkeni bir ile sona ererse /
, içeriği kopyalanır ( rsync -r a/ b
yaratır b/foo
her için a/foo
). Aksi takdirde dizinin kendisi kopyalanır ( rsync -r a b
yaratır b/a
).
Bu yüzden burada *.pdf
, bunları içeren dizinleri dahil etmemiz ve her şeyi hariç tutmamız gerekir .
rsync -a --include='*.pdf' --include='*/' --exclude='*' ~/LaTeX/ ~/Output/
Bunun, tüm dizinleri, bunlarla eşleşen dosya veya alt dizin içermeyenleri bile kopyaladığını unutmayın. Bu seçenekle bu durumdan kaçınılabilir --prune-empty-dirs
(evrensel bir çözüm değildir, çünkü o zaman açıkça eşleştirerek bile bir dizini kopyalayamazsınız, ancak bu nadir bir gerekliliktir).
rsync -am --include='*.pdf' --include='*/' --exclude='*' ~/LaTeX/ ~/Output/
**
desenini kullanarak ) işe yaramalı .