Diferença entre cp -r e cp -a

174

Estou procurando a diferença entre cp -re cp -a. O que significa "recursivo" em termos de cópia de arquivos de uma pasta?

Randy
fonte
62
algumas pessoas estão procurando uma explicação melhor para as páginas de manual, porque nem sempre é claro o que a descrição significava. Eu tive que cavar muitas vezes e testar / experimentar para descobrir o que realmente está acontecendo com um comando específico. A página de manual do grep pode me confundir a qualquer dia.
Joe
2
Entendo sua frustração, mas, na maioria das vezes, a melhor maneira de aprender é testar e experimentar.
Triplicou em 8/08/12
37
OU aprenda fazendo perguntas aqui, obtendo a resposta da maneira que entender e, em seguida, tenha uma melhor noção do que e como testar e experimentar. Tenha em mente que funciona para você muitas vezes não funciona para mim, etc. etc.
Will Lanni

Respostas:

198

Recursivo significa que cpcopia o conteúdo dos diretórios e, se um diretório tiver subdiretórios, eles também são copiados (recursivamente). Sem -R, o cpcomando ignora diretórios. -ré idêntico ao -RLinux, difere em alguns casos extremos em outras variantes do Unix.

Por padrão, cpcria um novo arquivo que possui o mesmo conteúdo que o arquivo antigo e as mesmas permissões, mas restrito pelo umask ; a cópia é datada do momento da cópia e pertence ao usuário que está fazendo a cópia. Com a -popção, a cópia tem o mesmo horário de modificação, o mesmo horário de acesso e as mesmas permissões que o original. Ele também possui o mesmo proprietário e grupo que o original, se o usuário que está fazendo a cópia tiver permissão para criar esses arquivos.

A -aopção significa -Re -p, além de algumas outras opções de preservação. Ele tenta fazer uma cópia o mais próximo possível do original: a mesma árvore de diretórios, os mesmos tipos de arquivo, o mesmo conteúdo, os mesmos metadados (horários, permissões, atributos estendidos etc.).

Gilles
fonte
35
Basicamente, a menos que você queira algo especial, nunca precisará, -rporque -a(para o archive) é sempre o mais seguro e provavelmente o que você esperava que acontecesse.
8282
2
@ams Sim, esse é um bom resumo. O único motivo comum de usar -ré porque você está em alguma variante unix diferente do Linux que não possui -a, e geralmente você usaria cp -rp. Or rsync -a.
Gilles
às vezes as permissões permitem -r mas não -a
DrCord 19/15/15
Não -r, não -R não funciona no Ubuntu 18
Arkady
16

A opção -r ou -R para "recursivo" significa que ele copiará todos os arquivos, incluindo os arquivos dentro das subpastas.

A opção -a listada é igual a -dR, o que significa que preservará os links e copiará o conteúdo dos subdiretórios. O que significa preservar links é que ele não seguirá os links, pois está copiando recursivamente.

Joe
fonte