Bir klasörü rsync'den nasıl dışlayabilirim?


60

NAS sürücümdeki ana klasörümü yedeklemeye çalışıyorum. Bunu veriyorum:

rsync -Paz --exclude-from 'rsync-exclude.txt' /home/chris/ admin@192.168.1.65:LinuxHome

rsync-exclude.txtbu içeriğin neresinde :

/home/chris/Downloads/*
/home/chris/Downloads/
/home/chris/Downloads/*.*

ve aynı klasörde rsync (home folder) yürütüyorum.

Ancak, rsync de bu klasörü kopyalamaya çalışır.

Neyi yanlış yapıyorum?

Yanıtlar:


88

Dışlama listenizde mutlak yollar sağlıyorsunuz .

Rsync ile başlayan tüm dışlama (veya içerme!) Yolları /" aktarım köküne " bağlanır .

Bu durumda transferin kökü /home/chris. Eğer yaptıysanız:

rsync -Paz --exclude-from 'rsync-exclude.txt' / admin@192.168.1.65:

... o zaman istisnalarınız işe yaramalı (ancak o dosya sistemindeki her şeyi kopyalayacaksınız !)

Eğer sadece senkronize çalışıyoruz Fakat ev dizini ve hiçbir alt dizin yoktur /home/chrisadında "home/chris/Downloads", rsynceşleşen hiçbir şey bulur.

Bu yüzden /home/chrisparçaları rsync-exclude.txtdosyanızdan çıkarmayı deneyin .

Aslında, dosyada sadece bir satır gerekir:

/Downloads

Not Eğer lider belirtmek yoksa o /ve diğer dizinleri adında var olur "Downloads", bu da hariç tutuluyordu. Yalnızca "üst düzey" in (kaynak dizine, aka "aktarımın kökü") Downloadsdizini hariç tutmak istediğinizi varsayalım , bu yüzden öncü isteyeceksiniz /.

KOLAY YOL (sadece birkaç yolu hariç tutmak için)

Yalnızca bir dizini dışlamanız gerekiyorsa, bunu yapın (ayrı bir dosyadan kaçınarak):

rsync -Paz --exclude /Downloads /home/chris/ admin@192.168.1.65:LinuxHome

Ayrıca --exclude, etiketleri birlikte zincirleyebilirsiniz :

rsync -Paz --exclude /Downloads --exclude '/Something Else' --exclude .hiddenFile /home/chris/ admin@192.168.1.65:LinuxHome

Hiçbir çizgi var çünkü bu bir dışlamak unutmayın .hiddenFilegelen herhangi her dizin o kopya!

Ancak, birkaç istisna dışında bir süreniz varsa, daha iyi durumdasınız --exclude-fromve bir dosya.

Not

Ben sen onu görüyoruz, ama rsync ile yeni olanlar gerekir sonunda eğik çizgi not arasında/home/chris/

rsyncMan sayfasından alıntı yapmak için , "Bir dizinin ismini kopyalamak yerine" bu dizinin içeriğini kopyala "anlamına gelen bir kaynağa / kaynağa bakabilirsiniz."

Eğer çizgi sondaki o bıraktığı Yani, sen adlı bir dizinde ile sona ereceğini chris, hedef dizin içindeki içeren her şeyi /home/chris(orijinal hariç Downloadstabii dizininde!).


2

Bu gözler için daha kolay olabilir ve dizinleri ve sözdizimini hariç tutmak üzerine sadece bir not:

SRC='/home/username'
DST='/run/media/username/EasyStoreRT/rsync'

rsync -avrh --stats                                 \
    --log-file=/home/username/log/rsync-home.log    \
    --exclude='/username/.cache'                    \
    --exclude='/username/.local/share/Trash'        \
    $SRC \
    $DST \

Bu dizinleri ve içindeki tüm dosyaları dışlar. Sebep ne olursa olsun, rysnc / home / username 'ı /.cache' e eklemiyordu. Yalnızca ev / kendi başına bağlantı kurardı, bu nedenle hariç tutulan her dizine / username eklemek zorunda kaldım.

Man sayfaları, "eğer desen / ile başlarsa, o zaman dosyalar hiyerarşisindeki belirli bir noktaya tutturulur, aksi takdirde yolun sonuna denk gelir." Ancak, bu hiyerarşi, yalnızca kaynak dizindeki ilk dizin gibi görünüyor. Bash, sürüm 4.4.23 (1) kullanıyorum - sürüm.

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.