rsync: ignora arquivos para os quais não tenho permissões

15

Estou usando rsync -rlptD para copiar um diretório de outro usuário. Existem alguns arquivos (não tenho como saber disso com antecedência) que não tenho permissão para copiar. Existe uma maneira de o rsync ignorar isso? O problema é que, se o rsync retornar um valor diferente de zero, meu script basx -x sairá.

    
por JeffCharter 01.02.2013 / 23:26

1 resposta

6

O Rsync não tem uma opção para isso. Eu vejo duas soluções. Uma é analisar as mensagens de erro do rsync; isso não é muito robusto. A outra é gerar uma lista de arquivos ilegíveis para filtrar.

cd /source/directory
exclude_file=$(mktemp)
find . ! -readable -o -type d ! -executable |
  sed -e 's:^\./:/:' -e 's:[?*\[]:\1:g' >>"$exclude_file"
rsync -rlptD --exclude-from="$exclude_file" . /target/directory
rm "$exclude_file"

Se o seu find não tiver -readable e -executable , substitua-os pela diretiva -perm apropriada.

Isso pressupõe que não há arquivos ilegíveis cujo nome contenha uma nova linha. Se você precisar lidar com isso, será necessário produzir uma lista de arquivos delimitada por nulo como esta e passar a opção -0 para rsync :

find . \( ! -readable -o -type d ! -executable \) -print0 |
  perl -0000 -pe 's:\A\./:/:' -e 's:[?*\[]:$1:g' >>"$exclude_file"
    
por 02.02.2013 / 01:18