Que diferença entre “tar -cSF - | tar xvf - ”e“ cp -R ”

0

Por exemplo,

tar -cSf - -C /mnt/abc . | tar xvf - -C /mnt/def

não é o mesmo que:

cp -RT /mnt/abc /mnt/def

?

    
por Xiè Jìléi 18.10.2010 / 18:30

5 respostas

2

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).

    
por 18.10.2010 / 19:48
2

cp copia caractere por caractere. Usando o suporte a pipes do kernel, nós poderíamos copiar arquivos bloco por bloco. O motivo pelo qual usei o tar no passado foi para transferências de rede, como o seguinte:

tar czv ListOfFiles | ssh remote.box.com tar xz -C /home/user/PathToCopy

Veja este link para mais detalhes.

    
por 18.10.2010 / 21:10
1

com a cópia tar, você pode:

  • coloque outros programas entre os canais (por exemplo, pv para medir a velocidade de cópia)
  • ou netcat para transferi-lo para outra máquina
  • você pode usar --include e --exclude para evitar copiar alguns arquivos ou incluir apenas determinados arquivos
por 18.10.2010 / 20:19
0
O

tar manipula mais coisas de maneira apropriada, como arquivos esparsos, permissões e links.

    
por 18.10.2010 / 18:35
0

O comando cp não preservará os timestamps, você precisa adicionar o -p switch. -d também será necessário para preservar links simbólicos.

    
por 18.10.2010 / 18:42