De man cp
, resumido:
-a
: Modo de arquivo. O mesmo que-RpP
opções. Preserva a estrutura e os atributos dos arquivos, mas não a estrutura de diretórios.-R
: Sesource_file
designar um diretório,cp
copia o diretório e toda a subárvore conectada naquele ponto. Sesource_file
terminar em a/
, o conteúdo do diretório será copiado em vez do próprio diretório.-p
: faz comcp
que os seguintes atributos de cada arquivo de origem na cópia sejam preservados: horário de modificação, horário de acesso, sinalizadores de arquivo, modo de arquivo, ID de usuário e ID de grupo, conforme permitido pelas permissões.-P
: Nenhum link simbólico é seguido. Este é o padrão se a-R
opção for especificada.
-P
é descrito como incluído em-R
, mas então por que-a
é descrito como-RpP
e não apenas-Rp
?O que significa queJá respondido em Ask Different, https://apple.stackexchange.com/q/267220-a
não preserva a estrutura de diretórios?- Os
-R
sinalizadores e-P
fazem sentido ao copiar arquivos, não pastas, por exemplo, ao fazercp *.(txt|md) docs/
?
zsh 5.9 (x86_64-apple-darwin23.0), macOS 14.4.1
As opções
-P
,-H
e-L
padrão são mutuamente exclusivas. Definir um desativa os outros dois. O último (da esquerda para a direita) vence.-LHP
é o mesmo que-P
,-HPL
é o mesmo que-L
. Agora, quando o documento diz que o-P
comportamento é o padrão,-R
não significa que ele-P
também seja aplicado quando você usa-R
.cp -LR
é igualcp -RL
e não igual acp -R
/cp -RP
.Por outro lado,
-a
(não é uma opção padrão) é o mesmo que-RpP
,cp -L -a
écp -L -RpP
e-P
cancela-L
. Você precisacp -a -L
se quiser-L
se inscrever.Você pode segui-lo no código fonte do FreeBSD
cp
(no qual o macos é baseado):[...]
O que significa que
-a
não preserva a estrutura de diretórios? não está claro para mim. O palavreado não aparece na página de manual do FreeBSDcp
, portanto deve ter sido adicionado pela Apple. A sugestão de que isso significa que não excluirá arquivos e subdiretórios existentes ao copiar para um diretório já existente não me convence. Você provavelmente teria que perguntar à Apple (já que o código-fonte do AFAIK e o histórico de controle de revisão não estão disponíveis publicamente) para ter certeza.Observe que não são arquivos versus diretórios no Unix. Diretório é apenas um dos muitos tipos de arquivos. Outros tipos incluem fifos , sockets , block devices , symlinks , arquivos regulares ...
-R
destina-se apenas àR
cópia ecursiva de diretórios, para outros tipos de arquivos, que não tem efeito, exceto por uma exceção que é principalmente um efeito colateral:-R
does causar passagem física como se-P
fosse dada, o que significa que para arquivos do tipo link simbólico, sejam links simbólicos para diretórios ou qualquer outro tipo de arquivo, é apenas o link simbólico que está sendo copiado, e não seu destino. Se você deseja esse efeito, prefere usar a-P
opção destinada a isso.