Você pode fazer isso de maneira mais eficiente usando find
após descompactar seu arquivo:
# find /path -user webdev -exec chown webprod '{}' +
No servidor Dev, temos uma árvore de arquivos de propriedade do usuário "webdev" ou "webserv".
Eu gostaria de aumentar essa árvore de arquivos e extraí-la no servidor prod, com a alteração de que qualquer arquivo pertencente a "webdev" agora seria de propriedade de "webprod" e qualquer propriedade pelo webserv permanecerá de propriedade do webserv.
Existe alguma maneira de fazer esse tipo de "troca"?
Se o webprod executar o comando tar, os arquivos pertencerão ao webprod. Os arquivos no arquivo tar podem precisar ser legíveis pelo webprod.
Na maioria dos casos, esse webprod não deve ser o ID do usuário no qual o servidor da Web é executado. Isso limitará a capacidade de modificar seu conteúdo ao comprometer o servidor da Web.
Acho que você pode fazer algo inteligente com a opção --to-command
em versões recentes do gnu tar (por volta de 1.25) para lidar com isso. Isso deve permitir que você faça transformações arbitrárias de saída de tarfile, canalizando-a por meio de um programa de filtro personalizado. Teoricamente, isso poderia verificar o proprietário de cada arquivo extraído do arquivo e alterá-lo, se necessário.
No entanto, não há bons exemplos de como usar essa funcionalidade na rede agora e minhas tentativas em um script de filtro foram infrutíferas.
Então me ocorreu que você poderia resolver esse dilema dividindo o arquivo em dois arquivos separados. Isso pode ser feito com o tar, mas isso é realmente algo melhor manipulado pelo cpio, porque o cpio tem um tratamento de entrada mais flexível.
Então, aqui está minha tentativa de solução usando find
e cpio
. Primeiro, faça um arquivo cpio de todos os arquivos pertencentes a webserv :
cd /var/www && find . -owner webserv | cpio -ov --format=crc | gzcat webserv-files.cpio.gz
faça um arquivo cpio dos arquivos de propriedade do webdev , alterando o proprietário para webprod :
cd /var/www && find . -owner webdev | cpio -ov --format crc --owner webprod | gzcat webdev-files.cpio.gz
(note que só funcionará se for executado como root de acordo com a página do cpio).
Agora, no seu destino, extraia os dois arquivos:
cd /var/www
gzcat webserv-files.cpio.gz | cpio -iv
gzcat webdev-files.gpio.gz | cpio -iv
Acho que isso terá o resultado desejado, embora eu não tenha testado muito bem.