Como cp arquivos restantes após tentativa com falha

23

Estou tentando copiar um diretório grande de uma unidade para outra. Saí por engano antes de terminar, apenas 80% dos arquivos foram copiados. Existe alguma maneira de copiar os arquivos restantes sem começar do zero?

barro32
fonte

Respostas:

35

Eu tentaria,

rsync -a /from/file /dest/file

você pode usar outras opções como --append, -P (--partial --progress). Veja man rsync para mais informações.

Ou se você estiver usando cp, use cp -u.

de man cp:

-u, --update
     copy only when the SOURCE file is newer than the destination file or when the destination file is missing.
Rahul
fonte
1
Vou ter que dar a Rahul porque ele acabou de derrotá-lo, mas obrigado e todos recebem um voto positivo!
Barro32
3
Se a primeira cópia terminou abruptamente, um dos arquivos pode ser copiado apenas parcialmente e cp -upode não se importar, pois apenas verifica os carimbos de data e hora, e não o tamanho ... Portanto, você precisará touchprimeiro dos arquivos de origem, se precisar usá-lo . (Ou simplesmente usar rsync.)
ilkkachu
@ilkkachu isso mesmo. Vou atualizá-lo em breve.
Rahul
O cp deixa um único arquivo apenas parcialmente transferido? Se isso acontecer, então -u parece que o deixaria com um diretório que estava apenas parcialmente funcionando.
Trevor
15

Para transferências parciais de arquivos, cppode não ser o que você precisa.

Sugiro usar em seu rsynclugar. Mesmo quando a transferência falhar, você pode simplesmente executar novamente o comando posteriormente, e ele copiará apenas os arquivos ausentes.

Exemplo:

$ rsync -aPEmivvz from/ to/

(irá copiar from/para o to/diretório)

Como rsyncsincronizar e verificar após cada transferência, garantir que os arquivos foram copiados corretamente é trivial.

O conjunto swich -aPEmivvzé o meu padrão de go-to seleção, sempre que copiar arquivos através de redes ou unidades externas, incluindo plug-in dispositivos, como SD-Cards, etc.

Estes são os switches que eu uso quase sempre:

-a: "arquivo", inclui -rlptgo(recursivo, links simbólicos como links simbólicos, permissões, horários, grupo, proprietário)

-P: "progresso parcial" mostra uma barra de progresso agradável para cada arquivo

-E: "executability" preserva se executável ou não

-m: "noempty" apaga dirs vazios

-i: "summary" imprime o resumo das alterações para todas as atualizações

-vv: "mais detalhado"

-z: "compressão"

polemon
fonte
6

O que você provavelmente deseja e não cpneste caso é rsync.

Apenas copie recursivamente uma estrutura de diretório para um novo local:

rsync -av /path/to/source /path/to/destination 
Shadur
fonte
4

Você não deve usar cppara isso. Como outros já declararam, não é a ferramenta certa para o trabalho. A ferramenta correta vai depender dos seus objetivos.

Se você quiser apenas uma cópia direta:

rsync /source /destinationcom algum nível de sinalizadores. Veja as outras respostas para alguns exemplos realmente bons.

Se você deseja ter atualizações bidirecionais

unisoné o caminho a percorrer. O Rsync não se sai muito bem na resolução de conflitos com sincronizações bidirecionais. Exclui especialmente. Então você deseja que cópias bidirecionais sejam acionadasunison

Se você deseja backups e os arquivos são baseados em texto, tente usar git. O Git pode ser executado localmente, não há necessidade de um "servidor". De fato, os servidores git são apenas métodos de compartilhamento de arquivos. Você poderia totalmente ter um repositório Git na unidade de backup e "empurrá-lo" para ele. Novamente, isso realmente funciona se os arquivos forem baseados em texto e você estiver tentando obter um backup unidirecional.

Novamente, se você estiver procurando por um backup (e não apenas uma vez), consulte deja-dupe, BackIntime ou opções semelhantes. Eles tiram instantâneos dos dados em um determinado momento. Todos eles rodam o rsync sob o capô.

coteyr
fonte
4

Você também pode copiar todos os arquivos novamente, pedir confirmação para cada substituição e responder automaticamente não à pergunta:

yes n | cp -i /source /dest

(você provavelmente já usou mais opções, -radicione apenas como cp -pri /source /dest...)

Ned64
fonte
3

Use o comando rsynccom as seguintes opções:

rsync --progress --partial --append /source_file /destination_file
GAD3R
fonte