Como cp os arquivos restantes após tentativa fracassada

23

Estou tentando copiar um diretório grande de uma unidade para outra. Eu, por engano, fiz o logout antes de terminar, então apenas 80% dos arquivos foram copiados. Há espaço para copiar os arquivos restantes sem começar do zero?

    
por barro32 05.08.2016 / 13:08

6 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.
    
por 05.08.2016 / 13:10
15

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

Sugiro usar rsync . Mesmo quando a transferência falhar, você pode simplesmente executar novamente o comando mais tarde, e copiará apenas os arquivos ausentes.

Exemplo:

$ rsync -aPEmivvz from/ to/

(copiará from/ no diretório to/ )

Como rsync faz a sincronização e a verificação após cada transferência, garantir que os arquivos foram copiados corretamente é trivial.

O conjunto de swich -aPEmivvz é a minha seleção padrão go-to , sempre que copiar arquivos em redes ou unidades externas, incluindo dispositivos plug-in, como cartões SD, 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, horas, grupo, proprietário)

-P : "progresso parcial" mostra uma boa barra de progresso para cada arquivo

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

-m : "noempty" remove diretórios vazios

-i : "resumo" imprime resumo de alterações para todas as atualizações

-vv : "mais detalhado"

-z : "compactação"

    
por 05.08.2016 / 13:11
6

O que você provavelmente quer, em vez de cp , neste caso, é rsync .

Apenas recursivamente copiando uma estrutura de diretórios para um novo local:

rsync -av /path/to/source /path/to/destination 
    
por 05.08.2016 / 13:10
4

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

Se você quer apenas uma cópia direta:

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

Se você quiser 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ê quer que cópias bidirecionais sejam disparadas unison

Se você quiser backups e os arquivos forem baseados em texto, tente usar git . 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ê pode ter um repositório git no drive de backup e "empurrar" para ele. Novamente, isso só funciona se os arquivos forem baseados em texto e se você tentar obter um backup unidirecional.

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

    
por 05.08.2016 / 18:17
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 usou mais opções, como -r , então adicione-as como cp -pri /source /dest ...)

    
por 05.08.2016 / 20:43
3

Use o comando rsync com as seguintes opções:

rsync --progress --partial --append /source_file /destination_file
    
por 05.08.2016 / 13:50

Tags