Preciso copiar uma pasta / home / user de um disco rígido para outro. Possui 100.000 arquivos e tamanho 10G.
eu uso
cp -r /origin /destination
Às vezes, recebo alguns erros devido a links quebrados, permissões e assim por diante. Por isso, corrijo o erro e preciso iniciar novamente a cópia.
Gostaria de saber como eu poderia dizer ao comando "cp", uma vez que ele tenta copiar novamente, para não copiar arquivos novamente se eles existirem na pasta de destino.
Respostas:
cp -R -u -p /source /destination
O sinalizador
-u
( ou--update
) faz exatamente isso:Na página de manual do cp:
fonte
yes n | cp -i /source/* /destination 2>/dev/null
Apenas use
cp -n <source> <dest>
.Na página do manual :
fonte
rsync -aq /src /dest
Além de copiar apenas arquivos mais recentes, ele apenas copiará as partes mais novas dos arquivos se o arquivo tiver sido alterado. Ele é destinado a copiar em links de rede onde você deseja minimizar a quantidade de dados - mas também funciona muito bem localmente.
fonte
Procure a opção "-u" para o
cp
comando.fonte
Todas as respostas acima estão corretas, mas se você estiver fazendo isso recursivamente,
você deveria fazer:
fonte
Você deve copiar como root para manter permissões / propriedade
Veja também o rsync
fonte
Solução POSIX
Outras respostas usam
-u
ou-n
opções decp
. Nenhuma delas é exigida pelo POSIX ; nem érsync
de mais uma resposta; nem éyes
usado em um dos comentários.Ainda podemos reproduzir
yes n
com umwhile
loop. Isso leva à seguinte solução POSIX:fonte
Usar
cp -rn <sourcedirname>/. <destdirname>
A opção r torna a cópia recursiva nos diretórios.
A opção n (versão longa sem obstrução) garante que os arquivos existentes nunca sejam substituídos.
O '
/.
' após o sourcedirname garante que ele não se torne um subdiretório sob o destdirname, em vez de todo o conteúdo do primeiro ser copiado para o último.fonte