Запретить 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