Предотвратяване на rsync от изтриване на целеви файлове, които съответстват на даден модел

Използвам rsync за синхронизиране на файлове от източник към дестинация:

rsync -av --delete source destination

Имам една директория от страната на местоназначението, която не е от страната на източника. Бих искал да попреча на rsync да изтрие тази директория. Има ли опция, която мога да предам на rsync, за да предотвратя изтриването на тази директория при синхронизиране?


person turtle    schedule 26.09.2013    source източник


Отговори (2)


Можете да изключите файлове/директории с --exclude. Това ще попречи на директорията somedir да бъде синхронизирана/изтрита:

rsync -avrc --delete --exclude somedir source destination
person kielni    schedule 26.09.2013
comment
Ако искате да изключите somedir само от едно конкретно място в дървото на директорията, можете да закотвите изключването с /. Това ще подобри производителността - rsync ще трябва да провери пътя само веднъж! напр. rsync -avrc --delete --exclude /path/p2/somedir source destination - person Randy Skretka; 26.02.2014
comment
-r се подразбира от -a и не се изисква. - person Tom Hale; 18.01.2017
comment
За всеки, който се чуди какво представляват rc в горното -avrc, те нямат нищо общо с този въпрос. (r=рекурсивно, c=пропускане въз основа на контролна сума) - person Joschua; 15.05.2019

Както бе споменато в подобен въпрос, това може да бъде постигнато с помощта на --filter опция с protect правило:

$ rsync ... --filter 'protect /remote-directory-to-keep/' ...

За разлика от приетия в момента отговор, използването на --filter е полезно, например, ако искате да използвате --exclude с --delete-excluded.

person asaveljevs    schedule 12.05.2016
comment
това работи и с --filter 'protect *.js' --filter 'protect *.js.map' - person stringparser; 14.11.2018