Rsync apenas arquivos de um usuário específico

0

Existe uma maneira de rsync apenas arquivos de um determinado usuário? Eu tenho uma pasta que contém arquivos de vários usuários, mas gostaria apenas de fazer backup de arquivos de um usuário em particular.

Eu olhei para as páginas de manual do rsync, mas parece que não existe essa bandeira.

Alguma idéia?

    
por skeelogy 07.12.2013 / 04:26

2 respostas

0

Não, não há como separar, diretamente da linha de comando rsync, os arquivos de um usuário específico.

No entanto, é muito fácil gerar uma lista desses arquivos, por exemplo, com um comando como

   find /src/directory -type f -exec ls -lh {} \; | awk '{if ($3 == "your_name") for (i=1; i<=NF-8; i++) $i = $(i+8); NF-=8; print}'

find localiza todos os arquivos na árvore abaixo do diretório / src /, e imprime uma longa lista que inclui o proprietário e passa essas listagens para awk , que seleciona aquelas que pertencem a você ("your_name" ") e, em seguida, apenas para estes, imprime o caminho completo. A construção estranha que começa com for se deve ao fato de que alguns dos nomes de arquivos podem incluir um espaço, portanto essa construção imprime todos os tokens ( i.e. , todas as seqüências de caracteres delimitadas por espaço) da 9ª coluna em (nomes de arquivos pode incluir um número arbitrário de espaços). Além disso, essa construção garante que isso permaneça em uma única linha.

Você pode redirecionar essa saída para um arquivo e usar o rsync apenas nos arquivos listados nesse arquivo.

    
por 07.12.2013 / 08:55
0

A resposta de MariusMatutiae não funcionou para mim: Eu cheguei lá apenas massas de -rw-r--r-- linhas.

Então desenvolvi esta resposta:

  1. O comando find tem a opção -user (e -group ), que é muito mais fácil de usar. Precisamos de caminhos / nomes de arquivos relativos:
    a) find option: -printf '%P\n' , ou
    b) canalizar através de sed -e "s#/path##"
  2. O rsync oferece a possibilidade de sincronizar a partir de arquivos: %código%. Você precisa deste arquivo local. Então você tem que empurrar rsync os arquivos, ou o servidor que puxa deve obtê-lo primeiro do lado remoto, onde a lista foi gerada antes.

= > Para o meu exemplo, isso funciona:
1a) --files-from=FILE , ou
1b) find /usr/share/piwik/ -user www-data -printf '%P\n' > /tmp/find-piwik-rsync.list

2) find /usr/share/piwik/ -user www-data | sed -e "s#/usr/share/piwik/##" > /tmp/find-piwik-rsync.list

Você deve primeiro testá-lo com rsync -a --files-from=/tmp/find-piwik-rsync.list /usr/share/piwik/ remote:/usr/share/piwik / -n .

    
por 22.10.2015 / 20:27

Tags