Como copio uma pasta mantendo os proprietários e as permissões intactos?

322

Então, eu faria o backup da minha pasta pessoal copiando-a para uma unidade externa da seguinte forma:

sudo cp -r /home/my_home /media/backup/my_home

Com o resultado, todas as pastas nas unidades externas pertencem agora a root:root . Como posso ter cp mantendo a propriedade e as permissões do original?

    
por Psachnodaimonia 20.07.2012 / 17:27

7 respostas

389
sudo cp -rp /home/my_home /media/backup/my_home

De cp manpage:

 -p     same as --preserve=mode,ownership,timestamps

 --preserve[=ATTR_LIST]
          preserve the specified attributes (default: mode,ownership,timestamps),
          if possible additional attributes: context, links, xattr, all
    
por 20.07.2012 / 17:51
85

Você também pode usar rsync .

sudo rsync -a /home/my_home/ /media/backup/my_home/

Na% man_de% manpage:

 -a, --archive
              This  is  equivalent  to  -rlptgoD.  It  is a quick way of saying you want
              recursion and want to preserve almost everything (with -H being a  notable
              omission).    The   only  exception  to  the  above  equivalence  is  when
              --files-from is specified, in which case -r is not implied.

              Note that -a does not preserve hardlinks, because finding  multiply-linked
              files is expensive.  You must separately specify -H.

Veja esta pergunta para uma comparação entre rsync e cp : link

Observe as barras à direita (consulte a página de manual para obter detalhes).

    
por 20.07.2012 / 18:03
40
cp -a

Onde -a é a abreviação de --archive - basicamente copia um diretório exatamente como é; os arquivos mantêm todos os seus atributos e os links simbólicos não são desreferenciados ( -d ).

De man cp :

   -a, --archive
          same as -dR --preserve=all
    
por 14.10.2015 / 02:38
19

Eu uso cp -pdRx , o que será -p preserve mode, ownership & timestamps, -d preserve links (assim você obtém links simbólicos em vez do conteúdo do arquivo copiado), -R faz recursivamente e -x fica em um sistema de arquivos (só é realmente útil se você estiver copiando / ou algo com um ponto de montagem ativo).

PS: -R em vez de -r é apenas o hábito de usar ls -lR .

    
por 20.07.2012 / 18:17
14

cp tem uma opção para preservar a propriedade de arquivos. Na página de manual de cp :

-p    Cause cp to preserve the following attributes of each source file in the copy: modification
      time, access time, file flags, file mode, user ID, and group ID, as allowed by permissions.
      Access Control Lists (ACLs) and Extended Attributes (EAs), including resource forks, will also
      be preserved.
    
por 20.07.2012 / 17:51
11

Você pode fazer algo assim:

tar cf - my_home | (cd /media/backup; sudo tar xf - )

tar mantém as permissões, a propriedade e a estrutura de diretórios intactas, mas converte tudo em um fluxo de bytes. Você executa um "subshell" (os comandos entre parênteses) que mudam de diretório e, em seguida, obtém tar para reverter a conversão. Um vapor de bytes se torna diretórios e arquivos com propriedade e permissões corretas.

    
por 20.07.2012 / 17:43
7

A resposta é simples: cp tem uma opção -p que preserva as permissões (aqui está um peixe).

Mas, como diz Wojtek em seu comentário, man cp (lendo o bom manual) seria um bom ponto de partida (quer aprender a pescar?).

    
por 21.07.2012 / 04:26