rsync исключают каталог, не работающий

ctime файла обновляется, когда любые из метаданных изменяются.

$ ls -l x.py
-rw-rw-r--. 1 ignacio ignacio 485 Mar 26  2010 x.py
$ stat -c %z x.py
2010-03-26 11:57:56.237068175 -0400
$ chown ignacio x.py
$ stat -c %z x.py
2012-04-08 15:31:33.682383575 -0400
$ ls -l x.py
-rw-rw-r--. 1 ignacio ignacio 485 Mar 26  2010 x.py
36
18.07.2013, 02:48
4 ответа

Глобальный rsync отфильтруйте правила, начинающиеся с продвижения / привязываются на корне передачи. Заключение в кавычки от раздела "INCLUDE/EXCLUDE PATTERN RULES" страницы справочника:

если шаблон запускается с / затем, он привязывается на конкретном месте в иерархии файлов, иначе он подобран против конца пути. Это подобно продвижению ^ в регулярных выражениях. Таким образом "/нечто" соответствовал бы названию "нечто" в любом "корень передачи" (для глобального правила) или в каталоге файла слияния (для правила на каталог).

В Вашей команде (rsync ... -arv /home/ben home-ben/), файл /home/ben/foo был бы передан home-ben/ben/foo. Корень передачи home-ben и корректный путь фильтра /ben/foo. Таким образом,

  • соответствовать /home/ben/.ccache Вам нужен путь фильтра /ben/.ccache
  • соответствовать /home/ben/build/ Вам нужен путь фильтра /ben/build/

Более подробное объяснение может быть найдено в разделе "ANCHORING INCLUDE/EXCLUDE PATTERNS" rsync(1) страница справочника.


Обратите внимание что просто игнорирование продвижения / не обязательно, что Вы хотите. Заключение в кавычки снова от того же раздела страницы справочника:

Неполное "нечто" соответствовало бы названию "нечто" где угодно в дереве, потому что алгоритм применяется рекурсивно от вершины вниз; это ведет себя, как будто каждый компонент контура получает поворот будучи концом имени файла. Даже снятый с якоря "sub/foo" соответствовал бы в любой точке в иерархии, где "нечто" было найдено в рамках каталога, названного "sub". Посмотрите, что раздел по ПРИВЯЗКЕ ВКЛЮЧАЕТ/ИСКЛЮЧАЕТ ШАБЛОНЫ для полного обсуждения того, как указать шаблон, который соответствует в корне передачи.

Таким образом шаблон фильтра build/ соответствовал бы каталогу сборки где угодно в /home/ben, даже /home/ben/many/sub/directories/build/.

39
27.01.2020, 19:36
  • 1
    , который ключевая деталь - то, что наклонные черты имеют значение. При добавлении наклонной черты в конец исходного каталога (rsync-a источник / место назначения), это скопирует содержание источника, иначе rsync -a source destination копирует сам исходный каталог в место назначения. Это определяет то, что корень передачи будет в порядке для информирования исключить выражения. Надлежащее использование / в исключить выражении затем объяснено выше. Отметьте в особенности это rsync --exclude='/dir1' source destination ничего не исключит. –  pgoetz 19.06.2015, 16:38

Я думаю Ваш exclude пути должны быть относительно исходного пути. Можно ли попробовать это вместо этого?

rsync --exclude=build/ --exclude=.ccache -arv /home/ben home-ben/

Вот тест для сравнения:

/tmp$ tree src dest
src
├── a
└── b
dest
└── foo/

/tmp$ rsync -nav --exclude /tmp/src/b /tmp/src /tmp/dest
sending incremental file list
src/
src/a
src/b

$ rsync -nav --exclude b /tmp/src /tmp/dest
sending incremental file list
src/
src/a
11
27.01.2020, 19:36
  • 1
    Этот ответ, является неправильным. С родственником исключают путь, Вы исключили бы шаблон везде! –  rubo77 04.02.2018, 07:07
  • 2
    , Это сообщение корректно. Соответствие основано на тексте, не, файл инообесценил. Безотносительно пути вывод --verbose шоу команды являются форматом, который необходимо использовать. –  Sridhar Sarnobat 02.05.2018, 00:34

У меня была эта проблема в сценарии (не знаю, ваш ли это случай). Это произошло потому, что я использовал эту команду в сценарии, и я использовал sh вместо bash. проверьте shebang в начале вашего сценария.

2
27.01.2020, 19:36

Чтобы исключить конкретную папку с помощью rsync, необходимо учитывать относительный путь в команде. В вашем случае:

rsync --exclude=/ben/build/ --exclude=/ben/.ccache -arv /home/ben home-ben/

где «бен» — папка, которую вы синхронизируете.

0
27.01.2020, 19:36

Теги

Похожие вопросы