Recomendo vivamente rsync
. Ele pode detectar automaticamente quais arquivos estão faltando no destino em comparação com a origem e copiá-los apenas. IIUC, é a melhor solução para o seu caso de uso. No seu caso cp
é inútil porque sempre copiará todos os arquivos e será muito mais lento que rsync
. Se você entender como o rsync
funciona, será a melhor solução para copiar grandes conjuntos de dados em qualquer caso.
Apenas observe que se você decidiu usar rsync
via rede no futuro, ele deve ser instalado em máquinas de origem e de destino. Essa é a única desvantagem de rsync
que eu conheço.
EDITAR:
O uso de rsync
é muito simples. Geralmente se resume ao seguinte comando:
$ rsync -avz <SOURCE> <DESTINATION>
-a
significa modo de arquivo - copie o diretório recursivamente e recrie links simbólicos, salve permissões, horários de modificação, grupos ownerhsip, proprietários, -v
significa verboso, -z
means compress
Ao fazer o download, os nomes dos arquivos temporários são prefixados com .
. Da próxima vez, o mesmo comando será executado somente arquivos que foram alterados localmente e novos arquivos que apareceram em DESTINATION
serão baixados de DESTINATION
para SOURCE
.
É fácil usar rsync
over ssh
:
$ rsync -avz -e ssh hosting:/home1/rkumvbrh/mail/drabczyk.org/arkadiusz .
-e ssh
pode ser omitido porque o ssh é o padrão:
$ rsync -avz hosting:/home1/rkumvbrh/mail/drabczyk.org/arkadiusz .
Ao usar rsync
via rede, ele deve ser instalado no final:
$ rsync -avz -e "ssh" router:<FILE> .
ash: rsync: not found
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: remote command not found (code 127) at io.c(226) [Receiver=3.1.0]
EDITAR:
Ok, no começo eu pensei que você quer substituir todos os arquivos que foram corrompidos em seu disco local por arquivos de um disco externo e copiar todos os novos arquivos do disco externo. Mas se você quiser copiar apenas novos arquivos do seu disco interno para um disco externo, você deve adicionar a opção --ignore-existing
para que os novos arquivos sejam copiados para um disco externo, mas os arquivos corrompidos não:
$ rsync -avz --ignore-existing <PATH/TO/INTERNAL_HDD> <PATH/TO/EXTARNAL_HDD>
De man rsync
:
--ignore-existing This tells rsync to skip updating files that already exist on the destination (this does not ignore existing directories, or nothing would get done). See also --existing.
This option is a transfer rule, not an exclude, so it doesn't affect the data that goes into the file-lists, and thus it doesn't affect deletions. It just limits the files that the receiver requests to be transferred. This option can be useful for those doing backups using the --link-dest option when they need to continue a backup run that got interrupted. Since a --link-dest run is copied into a new directory hierarchy (when it is used properly), using --ignore existing will ensure that the already-handled files don't get tweaked (which avoids a change in permissions on the hard-linked files). This does mean that this option is only looking at the existing files in the destination hierarchy itself.