O rsync pode armazenar nomes curinga (talvez usando uma variável)?

2

Estou copiando arquivos de uma máquina para outra. A máquina A tem arquivos em:

/usr/a/foo/*
/usr/b/foo/*
/usr/c/foo/*
/usr/d/foo/*

A Máquina B deseja esses arquivos em:

/foo-1.2.3/usr/a/*
/foo-1.2.3/usr/b/*
/foo-1.2.3/usr/c/*
/foo-1.2.3/usr/d/*

Eu posso nivelar a estrutura usando rsync -ae ssh user@remote:/var/*/foo/ /foo-1.2.3/var/ , e posso copiar separadamente cada um dos quatro diretórios, mas não consigo descobrir se é possível fazer isso em um único comando sem recorrer a um ajudante externo (awk, sed, perl ...).

Note que isso é pura curiosidade neste momento, já que demorou mais para descobrir isso do que já foi feito para fazer quatro cópias separadas.

    
por ND Geek 10.06.2014 / 21:14

1 resposta

1

Você pode fazer isso com regras de inclusão / exclusão. Algo como (não testado):

rsync -a --include=*/foo/*** --exclude=* user@remote:/usr/ /foo-1.2.3/usr

O *** é introduzido em rsync 2.6.7 . Sem isso, você precisa de uma inclusão para o diretório ( foo/ ) e outra para o conteúdo ( foo/** ). Observe que, quando você usa uma inclusão como essa, precisa ter uma exclusão adequada como a última regra, pois tudo é incluído como padrão e os arquivos são incluídos / excluídos de acordo com a primeira correspondência na lista de regras (colocando --exclude=* primeiro não copia nada).

    
por 10.06.2014 / 21:51

Tags