Copie um diretório no Unix

68

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

Dinesh Kumar
fonte
2
"cp -r / dir1 / dir2" Isso está certo ??
Dinesh Kumar
Sim, está correto. Você pode marcar uma das respostas como sua solução.
qroberts

Respostas:

98
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 -f flag porque substituirá à força qualquer coisa para a qual você copie. Obrigado @Nifle por esta sugestão.

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

qroberts
fonte
9
Eu não concordo que você deva usar o f bandeira. -f if an existing destination file cannot be opened, remove it and try again
Nifle
Pessoalmente, eu sempre uso o sinalizador -f. Não é uma boa prática, então talvez você esteja certo.
qroberts
Se você sabe o que faz e sabe o que está fazendo, tudo bem. Mas, neste caso, com um usuário inexperiente, pode não ser adequado.
Nifle
@Nifle Sim, entendo o que você está dizendo. Só que, se ele forçar, as chances de isso funcionar são melhores do que se ele não o fizesse. Tudo depende do que você está fazendo e que você entende o que faz.
qroberts
Se você colocar uma nota em sua resposta sobre o -f sinalizador sendo útil se você estiver copiando & lt; source & gt; mais & lt; dest & gt; (como ao sobrescrever coisas em & lt; dest & gt;) eu vou fazer o upvote e deletar minha resposta)
Nifle
10

Enquanto o cp -R respostas estão certas (ENTRE o caso da bandeira no BSD deve ser capital, ambos são suportados no linux), existe um velho encantamento envolvendo alcatrão :

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

Por que diabos você faria isso? Porque o alcatrão tem uma compreensão bastante sofisticada de ligações ambos duros e 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.

dmckee
fonte
6

Eu gosto

cp -axv source dest

O Rsync é outra boa ferramenta para este

rsync -va source dest
Pete Ashdown
fonte