Eles são basicamente os mesmos, pois ambos farão uma cópia de uma árvore de diretórios. Eles diferem no tratamento dos metadados.
tar cf - … | tar xf - …
empacota todos os dados por meio do formato tar. Isso significa que todos os metadados que não podem ser representados no formato tar são perdidos. Existem várias variantes do formato tar, então exatamente o que é perdido dependerá da implementação do tar. Aqui estão algumas limitações do atual GNU tar (algumas delas podem ser superadas mudando para um formato tar diferente):
- Pode haver um limite em termos de tamanho do arquivo (255 bytes ok, não sei o limite exato), IDs de usuário e grupo (até 65535 ok), tamanhos de arquivo (até 8GB é ok), etc.
- Por exemplo, arquivos cujo caminho tiver mais de 100 caracteres e pelo menos dois links físicos na árvore que está sendo copiada não serão copiados corretamente (esqueci exatamente qual é o comportamento).
- As listas de controle de acesso não serão replicadas.
- Os timestamps só serão precisos para o segundo mais próximo.
cp -RT
não preserva muitos metadados. Em particular, não preservará o tempo e a propriedade dos arquivos. Por outro lado, com o cp do GNU, cp -a
preservará praticamente todos os metadados (eu não consegui culpá-lo, exceto talvez em tempos de acesso a diretórios em casos de canto e timestamps de subsegundos em alguns sistemas operacionais).