Então, eu estava indo para fazer backup da minha pasta pessoal, copiando-a para uma unidade externa da seguinte maneira:
sudo cp -r /home/my_home /media/backup/my_home
Com o resultado de que todas as pastas nas unidades externas agora pertencem root:root
. Como posso cp
manter a propriedade e as permissões do original?
permissions
cp
Psachnodaimonia
fonte
fonte
man
para mim é enigmático. Neste caso,man
a-r
dizsame as --preserve=mode,ownership,timestamps
. Como eu deveria saber que isso significa manter as permissões originais !?-p
Respostas:
Na página de manual do cp:
fonte
cp -a
. Isso também inclui a-r
bandeira ecursiva, mas faz mais do que isso - preserva tudo sobre o arquivo; Atributos SELinux, links, xattr, tudo. É "modo de arquivo". Existem ferramentas melhores para fazer um backup, mas se você estiver usandocp
um backup, não use outra coisa senãocp -a
.cp -a
não funciona em alguns sistemas: por exemplo, OS X, onde (em algumas versões pelo menos) é necessário usarcp -pR
. No meu atual sistema OS X (10.10.15),cp -a
parece ser honrado.diff <(getfacl -R folder1) <(getfacl -R folder2)
i sill para obter diferentes listas de controle de acesso :(Você também pode usar
rsync
.Na página de
rsync
manual:Consulte esta pergunta para obter uma comparação entre
cp
ersync
: https://stackoverflow.com/q/6339287/406686Observe as barras finais (consulte a página de manual para obter detalhes).
fonte
cp -p
é bom, mas eu gostorsync
de saída 's muito mais em geral que eu aliaspcp
paratime rsync --progress -ah
. Significa "cópia do progresso" em minha mente. E ambos aceitam-r
, por isso funciona bem para uso geral do terminal - mas, infelizmente, não combina comsudo
o mostrado nesta pergunta / resposta.rsync -a
não preserva atributos estendidos (-X
) e nenhuma ACL (-A
) - a breve descrição dizarchive mode; equals -rlptgoD (no -H,-A,-X)
. Por exemplo, os contextos do SELinux não serão preservados sem-X
. Para muitos casos de uso, isso é bom, mas se você fizer um backup da partição do sistema, a falta de -X poderá quebrar bastante. Até onde eu sei,cp -a
realmente preserva todos os atributos de arquivo.sudo cp -a
preserva a propriedade e os grupos, ossudo rsync -a
transforma em raiz. Então, @Perseids está correto./home
pasta inteirarsync -aX /home /mnt/sdd/
e funcionou como um encanto.Onde
-a
é a abreviação--archive
- basicamente ele 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
:fonte
Eu uso o modo
cp -pdRx
que-p
preserva o modo, a propriedade e os registros de data e hora,-d
preserva os links (para que você obtenha links simbólicos em vez do conteúdo do arquivo copiado),-R
faça-o recursivamente e-x
permaneça em um sistema de arquivos (apenas realmente útil se você estiver copiando/
ou algo com um ponto de montagem ativo )PS: em
-R
vez de-r
é apenas o hábito de usarls -lR
.fonte
cp -ax
é uma versão ligeiramente mais curta da mesma coisa. Isso funcionou muito bem - obrigado!-r
e-R
. Verifique a página do manual (mesmo a parte específica por muito tempo para ser citada aqui).-R, -r, --recursive copy directories recursively
.cp
tem uma opção para preservar a propriedade do arquivo. Na página do manual decp
:fonte
Você pode fazer algo assim:
tar
mantém permissões, propriedade e estrutura de diretórios intactas, mas converte tudo em um fluxo de bytes. Você executa um "subshell" (os comandos entre parênteses) que alteram o diretório e, em seguida, conseguetar
reverter a conversão. Um vapor de bytes se torna diretórios e arquivos com propriedade e permissões corretas.fonte
A resposta é simples:
cp
tem uma-p
opção que preserva as permissões (aqui está um peixe).Mas como Wojtek diz em seu comentário
man cp
(ler o manual) seria um bom ponto de partida (quer aprender a pescar?).fonte
você pode usar preserve = all, então sua cópia manterá todos os atributos como proprietário, grupo e registro de data e hora de seus arquivos. Portanto, faça seu backup com segurança com o seguinte comando.
fonte