Algo como
find /decompressed-backup-dir -uid 1050 -exec chown newuser:newgroup {} +
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>
Acho que o comando --de flag no comando chown é provavelmente a maneira mais fácil.
chown --from=oldguy newguy * -R
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
.
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
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.
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
Tags command-line linux shell