Altere a propriedade do arquivo recursivamente sem erros

1

Estou tentando escrever um script que conserte a propriedade de todos os arquivos pertencentes a um usuário específico, depois de alterar o UID do usuário.

Atualmente, corro:

chown -Rhc --from=${OLD_UID} ${NEW_UID} /
chown -Rhc --from=:${OLD_UID} :${NEW_UID} /

Onde OLD_UID e NEW_UID são os antigos e novos UIDs do usuário que acabei de modificar.

Isso tem o efeito desejado, mas sempre sai com um código de retorno de 1, devido a erros como este:

chown: cannot access ‘/proc/1103/task/1103/fd/4’: No such file or directory
chown: cannot access ‘/proc/1103/task/1103/fdinfo/4’: No such file or directory
chown: cannot access ‘/proc/1103/fd/4’: No such file or directory
chown: cannot access ‘/proc/1103/fdinfo/4’: No such file or directory

Minha teoria é que o processo que encontra todos os arquivos pega seu próprio processo, que então não existe quando chown tenta acessá-lo.

Eu poderia simplesmente jogar fora o código de retorno dos comandos, mas eu preferiria não fazer caso eu acabe ignorando erros reais.

Alguém pode sugerir uma abordagem alternativa que não relate erros falsos?

    
por David Edwards 12.12.2014 / 14:43

1 resposta

2

Você pode usar find e dizer para não descender em outros sistemas de arquivos (o que deve impedir que ele acesse sistemas de arquivos virtuais como proc , sys , etc):

find / -xdev -uid ${OLD_UID} -execdir chown ${NEW_UID} {} +

Isso pode não ser tão eficiente.

Outra forma de filtrar os arquivos virtuais seria remontar o sistema de arquivos raiz em outro lugar:

mkdir /tmp/chroot
mount -o .. -t .. /dev/... /tmp/chroot

E execute chown em /tmp/chroot .

    
por 12.12.2014 / 14:57

Tags