rsync --no-perms ainda preserva permissões e ignora umask

1

Estou tentando usar a solução link para o bug cp usando o rsync, e não consigo faça funcionar. Essencialmente, eu preciso copiar arquivos ou diretórios recursivamente usando rsync semelhante ao que o rsync -a faria, mas criar arquivos e diretórios com condições normais de umask. Mas tentar isso em um único arquivo mostra que ainda está preservando as permissões no arquivo de destino, embora eu tenha especificado a opção --no-perms :

bash-4.1$ cd /tmp
bash-4.1$ touch afile
bash-4.1$ chmod a-w afile
bash-4.1$ ls -ld afile
-r--r--r-- 1 theuser thegroup 0 Jul 24 16:50 afile
bash-4.1$ rsync --copy-links --recursive --times --group --no-perms afile afile2
bash-4.1$ ls -ld afile*
-r--r--r-- 1 theuser thegroup 0 Jul 24 16:50 afile
-r--r--r-- 1 theuser thegroup 0 Jul 24 16:50 afile2
bash-4.1$ 

O que eu quero é que o afile2 tenha as mesmas permissões que o afile3 criou normalmente:

bash-4.1$ touch afile3
bash-4.1$ ls -ld afile3
-rw-rw-r-- 1 theuser thegroup 0 Jul 24 16:51 afile3

Eu posso usar o comando "hard" find, conforme fornecido no link , mas prefiro não ter o sobrecarga de um comando de localização subseqüente para fazer o que eu acredito que a opção rsync --no-perms deva fazer.

Isso precisa funcionar no espaço do usuário (não requer raiz).

Este é um erro de rsync ou erro do usuário?

OS e versão do rsync envolvidos são:

bash-4.1$ lsb_release -r -i
Distributor ID: RedHatEnterpriseWorkstation
Release:    6.8
bash-4.1$ rsync --version
rsync  version 3.0.6  protocol version 30
Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.
bash-4.1$ 
    
por bgoodr 25.07.2017 / 01:56

1 resposta

3

Na página do manual do rsync:

To give new files the destination-default permissions (while leaving existing files unchanged), make sure that the --perms option is off and use --chmod=ugo=rwX (which ensures that all non-masked bits get enabled).

Então ...

rsync --copy-links --recursive --times --group --no-perms --chmod=ugo=rwX afile afile2

... deve fazer o truque com os arquivos de exemplo que você mostrou.

Se os arquivos de origem tiverem permissões de, digamos, 777 ...

rsync --copy-links --recursive --times --group --no-perms --chmod=ugo=rw,-X afile afile2

... removerá o sinalizador de executável.

    
por 25.07.2017 / 03:03

Tags