Я хочу исключить /bar / из rsync, но только в папке / foo /.

Если я использую --exclude '/foo/bar/', он будет работать только при запуске rsync в родительском каталоге foos, но в нашей настройке я не могу этого сделать.

Если я использую --exclude '/bar/', он исключит все /bar/ подкаталоги, включая, например, / fee /bar/.

То, что я хочу сделать, это исключить /bar / только когда целевой каталог / foo /

Это возможно в rsync?

Или мне нужен какой-нибудь скрипт-обертка, который вставляет правило исключения, для которого он предназначен, /foo /?

2 ответа2

0

На странице руководства rsync(1) «ВКЛЮЧИТЬ / ИСКЛЮЧИТЬ ПРАВИЛА ШАБЛОНА»:

   o      if the pattern starts with a / then it is anchored to a particu-
          lar spot in the hierarchy of  files,  otherwise  it  is  matched
          against the end of the pathname.  This is similar to a leading ^
          in regular expressions.  Thus "/foo" would match a name of "foo"
          at  either  the "root of the transfer" (for a global rule) or in
          the merge-file’s  directory  (for  a  per-directory  rule).
0

Смотрите следующий фрагмент, foo/bad и bar/bad создаются как dirs с каким-то файлом в них, если вы просто исключаете их, используя «* foo/bad», тогда каждый «bad» (файл или dir), содержащийся в foo/bad, будет быть проигнорированным

e@lap:/tmp$ mkdir -p source/foo/bad source/bar/bad target
e@lap:/tmp$ touch source/foo/bad/a.txt source/bar/bad/a.txt
e@lap:/tmp$ rsync -vr --exclude "*/foo/bad" source target/
sending incremental file list
source/
source/bar/
source/bar/bad/
source/bar/bad/a.txt
source/foo/

sent 153 bytes  received 47 bytes  400.00 bytes/sec
total size is 0  speedup is 0.00

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