Come comprimere i file rimanenti dopo un tentativo fallito


23

Sto cercando di copiare una directory di grandi dimensioni da un'unità a un'altra. Mi sono disconnesso per errore prima che fosse finito, quindi solo circa l'80% dei file copiati. È possibile copiare i file rimanenti senza ricominciare da zero?

Risposte:


35

Proverei,

rsync -a /from/file /dest/file

è possibile utilizzare altre opzioni come --append, -P (--partial --progress). Vedi man rsync per maggiori informazioni.

O se stai usando, cpallora usa cp -u.

da man cp:

-u, --update
     copy only when the SOURCE file is newer than the destination file or when the destination file is missing.

1
Dovrò darlo a Rahul perché ti ha appena battuto, ma grazie e tutti ricevono un voto!
barro32,

3
Se la prima copia è terminata bruscamente, uno dei file potrebbe essere copiato solo parzialmente, e cp -upotrebbe non interessarsene, dal momento che controlla solo i timestamp, non le dimensioni ... Quindi dovresti touchprima utilizzare i file sorgente se devi usarlo . (O semplicemente usare rsync.)
ilkkachu,

@ilkkachu è vero. Lo aggiornerò presto.
Rahul,

Cp lascia mai un singolo file trasferito solo parzialmente? Se lo fa, allora -u sembra che ti lascerebbe con una directory che funzionava solo parzialmente.
Trevor,

15

Per i trasferimenti parziali di file, cppotrebbe non essere quello che ti serve.

Suggerisco rsyncinvece di utilizzare . Anche quando il trasferimento fallisce, puoi semplicemente rieseguire il comando in un secondo momento e copierà solo i file mancanti.

Esempio:

$ rsync -aPEmivvz from/ to/

(copierà from/nella to/directory)

Dal momento rsyncche la sincronizzazione e il controllo dopo ogni trasferimento, garantire che i file siano stati copiati correttamente è banale.

Il set di swich -aPEmivvzè la mia selezione go-to standard , ogni volta che si copiano file su reti o unità esterne, inclusi dispositivi plug-in, come schede SD, ecc.

Questi sono gli interruttori che uso quasi sempre:

-a: "archivio", include -rlptgo(ricorsivo, collegamenti simbolici come collegamenti simbolici, autorizzazioni, orari, gruppo, proprietario)

-P: "avanzamento parziale" mostra una bella barra di avanzamento per ogni file

-E: "eseguibilità" preserva se eseguibile o meno

-m: "noempty" prugna dir vuoto

-i: "riepilogo" stampa il riepilogo delle modifiche per tutti gli aggiornamenti

-vv: "più prolisso"

-z: "compressione"


6

Quello che probabilmente vuoi piuttosto che cpin questo caso è rsync.

Basta copiare in modo ricorsivo una struttura di directory in una nuova posizione:

rsync -av /path/to/source /path/to/destination 

4

Non dovresti usare cpper questo. Come altri hanno affermato, non è lo strumento giusto per il lavoro. Lo strumento corretto dipenderà dai tuoi obiettivi.

Se vuoi solo una copia semplice:

rsync /source /destinationcon un certo livello di bandiere. Vedi le altre risposte per alcuni esempi davvero validi.

Se vuoi avere aggiornamenti bidirezionali

unisonè la strada da percorrere. Rsync non funziona molto bene alla risoluzione dei conflitti con le sincronizzazioni bidirezionali. Elimina appositamente. Quindi vuoi che le copie bidirezionali si accendanounison

Se si desidera eseguire il backup e i file sono basati su testo, è possibile provare a utilizzare git. Git può essere eseguito localmente, non è necessario un "server". In effetti, i server git sono solo metodi di condivisione dei file. Potresti avere un repository git sull'unità di backup e "spingerlo" verso di esso. Anche in questo caso funziona davvero solo se i file sono basati su testo e stai cercando di ottenere un backup unidirezionale.

Ancora una volta, se stai cercando un backup (e non solo una volta), guarda deja-dupe, BackIntime o opzioni simili. Prendono istantanee dei dati in un determinato momento. Corrono tutti rsync sotto il cofano.


4

Puoi anche copiare di nuovo tutti i file, chiedere conferma per ogni sovrascrittura, quindi rispondere automaticamente no alla domanda:

yes n | cp -i /source /dest

(probabilmente hai usato più opzioni, come -r, quindi aggiungile come cp -pri /source /dest...)


3

Utilizzare il comando rsynccon le seguenti opzioni:

rsync --progress --partial --append /source_file /destination_file
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.