Я хочу исключить/bar/из rsync, но только когда в папке,/foo/.
Если я использую - исключают '/foo/bar /', он будет только работать, когда rsync будет выполнен на foos родительском каталоге, но в нашей установке, я не могу сделать этого.
Если я использую - исключают '/bar / ', он исключит все/bar/подкаталоги, включая/fee/bar/, например.
То, что я хочу сделать, только исключают/bar/, когда целевой каталог является/foo/
Действительно ли это возможно в rsync?
Или у меня должен быть некоторый сценарий обертки, который вставляет исключить правило, для которого он предназначается, / нечто/?
От 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).
Посмотрите следующий отрывок, нечто / плохой и панель / плохой создается как директора с некоторым файлом в них, если Вы просто исключаете их использующий "*foo/bad" затем каждый 'плохо' (файл или dir) содержавшийся в нечто / плохой будет проигнорирован.
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