Como posso alterar todos os arquivos pertencentes a um usuário para outro usuário?

33

Estou procurando um comando do Linux que possa alterar a propriedade de todos os arquivos pertencentes a um determinado usuário, de preferência em um diretório de destino, para outro usuário especificado.

Meu comando dos sonhos seria algo como isto ...

chuser -R --olduser tom --newuser jerry

ou

chuser -R --olduser 1066 --newuser 1492

Este é o meu cenário ... Eu tenho um arquivo de backup (.tgz) com informações de usuário e grupo preservadas nele. Foi tirado de um servidor web rodando Apache e MySQL. Os arquivos no backup são de todo o sistema e contêm arquivos de vários usuários diferentes e várias contas do tipo de sistema, e é importante que, quando restaurados no novo servidor, as configurações não sejam perdidas. O problema é que os usuários na máquina que os arquivos estão sendo restaurados não correspondem aos do arquivo de backup. Por exemplo, ambas as máquinas possuíam um usuário MySQL, mas elas têm ids de usuário diferentes e existem vários ids de usuário que existiam em ambas as máquinas que pertencem a usuários diferentes. Isso significa que não há como sincronizar os usuários na nova máquina com os que estão na máquina antiga.

Eu posso encontrar todos os arquivos dos usuários com o comando find assim ...

find /decompressed-backup-dir -uid 1050

ou

find /decompressed-backup-dir -user tom

Se, como eu suspeito, não há como fazer o que eu quero com um único comando, então talvez haja uma maneira de canalizar os resultados do comando find para outro comando para lidar com a mudança de propriedade?

Eu poderia fazer isso com um script PHP, mas há 4GB e dezenas de milhares de arquivos no backup, então eu não quero usar PHP ou Perl, mas eu ficaria feliz com um script de shell que poderia lidar com isso. / p>     

por Night Owl 20.07.2011 / 06:24

6 respostas

24

Algo como

find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +
    
por 20.07.2011 / 06:27
53

Acho que o comando --de flag no comando chown é provavelmente a maneira mais fácil.

chown --from=oldguy newguy * -R
    
por 09.06.2014 / 14:01
6

Você pode usar find , como alguém postou, para fazer o chown .

No entanto, talvez não seja necessário que tar cuide das coisas para você.

Por exemplo, se você fizer um tar em machine A , em que usuário tom é uid 500 e, em seguida, untar , o arquivo machine B em que usuário tom é uid 505 , tar fará a coisa certa e tornará os arquivos pertencentes a uid 505 .

    
por 20.07.2011 / 19:52
5

Adicionando a resposta do SiteKickr , chgrp não tem o argumento --from , mas você pode conseguir o mesmo com chown omitindo o usuário.

Exemplo:

chown -R --from=:currentgroup :newgroup /some/directory
    
por 28.04.2016 / 12:48
1

A resposta define usuário e grupo:

find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +

mas se você quiser alterar apenas o grupo de arquivos que pertence a algum usuário, você não pode usar chown (tanto quanto eu sei), mas em vez disso use chgrp :

find /decompressed-backup-dir -uid 1050 -exec chgrp newgroup {} +

e para alterar apenas o grupo de arquivos que pertence a algum grupo que você tem que usar, por exemplo.:

find /decompressed-backup-dir -gid 400 -exec chgrp newgroup {} +

Apenas para adicionar conhecimento.

    
por 11.03.2013 / 09:59
-2

Você pode usar chown - R /directory/file

Este comando irá alterar a permissão para todas as instâncias do diretório chown - R /directory

    
por 01.05.2014 / 11:36