Rsync apenas arquivos de usuários específicos

0

Existe uma maneira de sincronizar apenas os 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 específico.

Eu olhei as páginas de manual do rsync, mas não parece haver uma bandeira assim.

Alguma ideia?

skeelogy
fonte

Respostas:

0

Não, não há como destacar, diretamente da linha de comando do 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}'

findlocaliza todos os arquivos na árvore abaixo do diretório / src / e imprime uma lista longa que inclui o proprietário, depois passa essas listagens para awk, que seleciona aqueles que pertencem a você ("seu_nome") e, somente para eles, imprime o caminho completo. A construção estranha iniciada com fordeve-se 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 (os nomes de arquivos podem 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, em seguida, usar o rsync apenas nos arquivos listados neste arquivo.

MariusMatutiae
fonte
0

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

Então eu desenvolvi esta resposta:

  1. O findcomando possui a opção -user(e -group) que é muito mais fácil de usar. Precisamos de nomes de caminho / arquivos relativos:
    a) findopção: -printf '%P\n'ou
    b) canalizesed -e "s#/path##"
  2. rsync oferece a possibilidade de sincronizar a partir de arquivos: . Você precisa deste arquivo local. Portanto, você deve enviar os arquivos por rsync, ou o servidor que recebe deve obtê-lo primeiro do lado remoto, onde a lista foi gerada anteriormente.--files-from=FILE

=> No meu exemplo, isso funciona:
1a) find /usr/share/piwik/ -user www-data -printf '%P\n' > /tmp/find-piwik-rsync.listou
1b)find /usr/share/piwik/ -user www-data | sed -e "s#/usr/share/piwik/##" > /tmp/find-piwik-rsync.list

2) rsync -a --files-from=/tmp/find-piwik-rsync.list /usr/share/piwik/ remote:/usr/share/piwik

Você deve primeiro testá-lo com -n/ --dry-run.

Reiner030
fonte