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
Глобальный 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/
.
Я думаю Ваш 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
--verbose
шоу команды являются форматом, который необходимо использовать.
– Sridhar Sarnobat
02.05.2018, 00:34
У меня была эта проблема в сценарии (не знаю, ваш ли это случай). Это произошло потому, что я использовал эту команду в сценарии, и я использовал sh вместо bash. проверьте shebang в начале вашего сценария.
Чтобы исключить конкретную папку с помощью rsync
, необходимо учитывать относительный путь в команде. В вашем случае:
rsync --exclude=/ben/build/ --exclude=/ben/.ccache -arv /home/ben home-ben/
где «бен» — папка, которую вы синхронизируете.
rsync -a source destination
копирует сам исходный каталог в место назначения. Это определяет то, что корень передачи будет в порядке для информирования исключить выражения. Надлежащее использование / в исключить выражении затем объяснено выше. Отметьте в особенности этоrsync --exclude='/dir1' source destination
ничего не исключит. – pgoetz 19.06.2015, 16:38