web-dev-qa-db-pt.com

Copie um diretório no Unix

Como posso copiar uma estrutura de diretório, dir1, para dir2, (com todos os subdiretórios) no Unix usando a janela do terminal?

74
Dinesh Kumar
cp -rf /source/path/ /destination/path/

-r = recursivo, copia todos os subdiretórios

-f = force, se um arquivo de destino existente não puder ser aberto, remova-o e tente novamente

Nota Você deve ter cuidado ao usar o sinalizador -f porque ele substituirá à força qualquer coisa para a qual você copiar. Obrigado @Nifle por esta sugestão.

Você pode querer usar o curinga * para copiar todos os arquivos no diretório, se necessário.

106
qroberts

Enquanto o cp -R responde está certo (BTW o caso do flag no BSD deve ser maiúscula, ambos são suportados no linux), existe m antigo encantamento envolvendo tar :

$ tar cf - . | (cd DIR; tar xf - )

Por que diabos você faria isso? Porque o tar tem um entendimento razoavelmente sofisticado de links tanto hard quanto simbólicos.

Deseja copiar para substituir os links simbólicos existentes por um que tenha o mesmo texto? Ou com links para o mesmo alvo (ajustando caminhos relativos para compensar)? Ou com cópias bit a bit do alvo?

Se dois arquivos no original estiverem vinculados, a nova estrutura deve ter duas cópias dos dados ou apenas uma?

Decisões decisões. Tar tem padrões sensíveis, mas permite que você seja muito específico sobre isso.

10
dmckee

Eu gosto

cp -axv source dest

O Rsync é outra boa ferramenta para este

rsync -va source dest
8
Pete Ashdown