4

Мне нужно использовать rsync для синхронизации нескольких каталогов с сервера rsync. Весь модуль rsync довольно большой, и мне нравится избегать других ненужных частей.

У меня есть нужные каталоги в виде текстового файла, но у меня проблемы с созданием правильного файла правил фильтрации. Мои требования следующие:

  • Включить в мой список только каталоги со всеми файлами и подкаталогами в них.
  • Файлы во включенных каталогах должны быть удалены, если они удалены на сервере.
  • Однако все .hg (хранилище Mercurial), расположенные на моем сайте, но не на сервере, и все файлы и подкаталоги в них не должны быть удалены.
  • Исключенные каталоги не должны быть удалены.

До сих пор я создал файл фильтра, который выглядит следующим образом

include sub/dir/I/want/***
include other/sub/dir/I/want/***
...
protect .hg/***
exclude **

Но это исключает все, по-видимому. Без строки exclude все остальные файлы также включены.

2 ответа2

2

Я нашел проблему. Мои проблемы были вызваны тем, как rsync обрабатывает имена файлов. Абсолютный (то есть относительно корня передачи) путь включения не работает напрямую, поскольку родительские каталоги также должны быть включены. В противном случае вся структура каталогов уже исключена, и требуемый файл или подкаталог никогда не обрабатывается. Само руководство говорит так (где-то), но оно очень нелогично.

Чтобы включить только некоторые вложенные каталоги, необходимо включить все родительские каталоги, а затем все остальные дочерние каталоги должны быть снова исключены:

include sub/
include sub/dir/
include sub/dir/I/
include sub/dir/I/want/***
exclude sub/*
exclude sub/dir/*
exclude sub/dir/I/*

include other/
include other/sub/
include other/sub/dir/
include other/sub/dir/I/
include other/sub/dir/I/want/***
exclude other/*
exclude other/sub/*
exclude other/sub/dir/*
exclude other/sub/dir/I/*

...

protect .hg*
exclude /*

Вторая последняя строка защищает все каталоги и файлы .hg* , такие как .hg/ и .hgtags . Линия исключает все остальные каталоги в корне передачи.

Я написал Perl-скрипт для создания файла фильтра из списка нужных подкаталогов. Он доступен по адресу http://www.perlmonks.org/?node_id=928357.

0

Запустите rsync дважды.

rsync hostname::sub/dir/I/want/        ./sub/dir/I/want/
rsync hostname::other/sub/dir/I/want/  ./other/sub/dir/I/want/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .