ajuda com (condicional?) rsync excluir

0

Eu quero excluir / bar / do rsync, mas somente quando estiver na pasta / foo /.

Se eu usar --exclude '/ foo / bar /', ele só funcionará quando o rsync for executado no diretório pai foos, mas em nossa configuração, não posso fazer isso.

Se eu usar --exclude '/ bar /', ele excluirá todos os subdiretórios / bar /, incluindo / fee / bar /, por exemplo.

O que eu quero fazer é somente excluir / bar / quando o diretório de destino é / foo /

Isso é possível no rsync?

Ou eu preciso ter algum script de wrapper que insira a regra de exclusão que o destino é / foo /?

    
por nedlud 05.05.2011 / 05:15

2 respostas

0

Na página rsync(1) man, "INCLUDE / EXCLUDE PADRÃO REGRAS":

   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).
    
por 05.05.2011 / 05:22
0

Veja o trecho a seguir, foo / bad e bar / bad get criado como dirs com algum arquivo neles, se você simplesmente os excluir usando "* foo / bad" então todo 'bad' (arquivo ou dir) contido no foo / bad será ignorado.

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
    
por 05.05.2011 / 06:56

Tags