Estou tentando copiar uma pasta ( SRC
) contendo alguns arquivos e subpastas.
O conteúdo e SRC
ele próprio têm o bit setgid habilitado (que é o s
lugar do x
trio no grupo). Além disso, o grupo de todo o conteúdo é srcgrp
enquanto os arquivos têm proprietários diferentes (digamos me
, she
e they
).
Agora, quero copiar toda a pasta ( SRC
incluída) para outra pasta (digamos /mnt/d/SRC
) /home/dog/data/SRC
.
O problema é o seguinte: quando eu peço cp -Rp /mnt/d/SRC /home/dog/data/SRC
a pasta está sendo copiada /home/dog/data/SRC
mas o dono de todo o conteúdo passa a ser me
, mesmo que eu dê chmod g-s /home/dog/data
anteriormente.
Gostaria de manter os proprietários dos arquivos de origem. Como eu poderia conseguir isso?
Obrigado.
Você deve executar o comando copy como root, caso contrário o proprietário será redefinido para você e o grupo poderá ser redefinido.
As regras completas são consideradas em ordem:
Essas regras são respeitadas usando
rsync
. No entanto, usando (GNU)cp
uma restrição adicional é aplicada em que os bits setuid/setgid são removidos se o proprietário ou grupo não puder ser mantido.Exemplo usando uma cópia de
src
todst
e, em seguidasdiff
, listando as diferenças entre os dois diretórios.Estado inicial para cada tentativa:
Usando (GNU)
cp
Usando
rsync
:Observe que onde
rsync
o grupo foi mantido é porque o usuário não root que executa o comando é membro desse grupo. Caso contrário, o grupo será redefinido para o grupo principal do usuário.Acredito que rsync seja a ferramenta que você deve usar para essa operação, pois preserva proprietários, permissões etc… Algo como:
deve resolver o problema, primeiro verifique com a
--dry-run
opção se ela faz o que você deseja.Como você aparentemente irá transferir os arquivos de um sistema de arquivos para outro (/mnt para /home), se você obtiver links simbólicos ou hardlinks entre os arquivos a serem copiados, você pode querer ler mais no manual o que você pode fazer exatamente com eles, obrigado para as opções l, L, k, K e H.
Além disso, percebendo pelo seu comentário que você não pode ser root, considere a
--fake-super
opção:sempre que eu precisar fazer uma cópia de uma pasta e todo o seu conteúdo [desconhecido] ou quando eu souber que há algumas permissões sofisticadas de arquivo/pasta acontecendo dentro das quais desejo preservar, use tar .
A desvantagem é que são algumas etapas versus um cp ou rsync , mas a vantagem é que quando você tem uma pasta com muitos arquivos, a cópia de apenas um arquivo tar pela rede pode acontecer na velocidade máxima, em vez de levar uma eternidade quando é fazendo milhares de subarquivos e pastas. E o arquivo tar e sua posterior extração preservarão tudo da pasta como estava no local de origem, naquele sistema.
Útil se você precisar copiar algo de um sistema de arquivos Linux como XFS ou EXT4 para um disco NTFS, onde muitas coisas do Linux simplesmente não são suportadas no sistema de arquivos NTFS. Mas se estiver contido em um arquivo compactado como .tar, tudo será preservado para que você não o perca enquanto tiver esse arquivo .tar.