Verbleibende Dateien nach einem fehlgeschlagenen Versuch cp

23

Ich versuche, ein großes Verzeichnis von einem Laufwerk auf ein anderes zu kopieren. Ich habe mich fälschlicherweise abgemeldet, bevor es fertig war, sodass nur ca. 80% der Dateien kopiert wurden. Ist es möglich, die verbleibenden Dateien zu kopieren, ohne von vorne zu beginnen?

barro32
quelle

Antworten:

35

Ich würde versuchen,

rsync -a /from/file /dest/file

Sie können auch andere Optionen verwenden --append, z -P (--partial --progress). Weitere Informationen finden Sie unter man rsync .

Oder wenn Sie cpdann verwenden, verwenden Sie cp -u.

von man cp:

-u, --update
     copy only when the SOURCE file is newer than the destination file or when the destination file is missing.
Rahul
quelle
1
Ich muss es Rahul geben, er hat dich nur geschlagen, aber danke und jeder bekommt eine Gegenstimme!
Barro32
3
Wenn die erste Kopie abrupt beendet, eine der Dateien nur teilweise kopiert werden, und cp -ukönnte sich nicht, da sie nur überprüft Zeitstempel, nicht die Größe ... Also Sie brauchen würde touchzuerst die Quelldateien , wenn Sie es benutzen . (Oder benutzen Sie einfach rsync.)
ilkkachu
@ilkkachu das stimmt. Ich werde es bald aktualisieren.
Rahul
Lässt cp jemals eine einzelne Datei nur teilweise übertragen? In diesem Fall scheint -u ein Verzeichnis zu hinterlassen, das nur teilweise funktioniert hat.
Trevor
15

Für teilweise Dateiübertragungen ist dies cpmöglicherweise nicht das, was Sie benötigen.

Ich schlage vor, rsyncstattdessen zu verwenden. Selbst wenn die Übertragung fehlschlägt, können Sie den Befehl zu einem späteren Zeitpunkt einfach erneut ausführen. Dabei werden nur die fehlenden Dateien kopiert.

Beispiel:

$ rsync -aPEmivvz from/ to/

(kopiert from/ins to/Verzeichnis)

Da rsyncnach jeder Übertragung eine Synchronisierung und Überprüfung durchgeführt wird, ist es trivial, sicherzustellen, dass die Dateien korrekt kopiert wurden.

Der swich Satz -aPEmivvzist meine Standard - Go-to - Auswahl, wann immer das Kopieren von Dateien über Netzwerke oder externe Laufwerke, einschließlich Plug-in Geräten wie SD-Karten etc.

Dies sind die Schalter, die ich fast immer benutze:

-a: "Archiv", enthält -rlptgo(rekursiv, Symlinks als Symlinks, Berechtigungen, Zeiten, Gruppe, Besitzer)

-P: "Teilfortschritt" zeigt einen schönen Fortschrittsbalken für jede Datei

-E: "Ausführbarkeit" erhalten, ob ausführbar oder nicht

-m: "noempty" schneidet leere Verzeichnisse ab

-i: "Zusammenfassung" Änderungsübersicht für alle Aktualisierungen drucken

-vv: "ausführlicher"

-z: "Kompression"

Polemon
quelle
6

Was Sie wahrscheinlich eher wollen als cpin diesem Fall ist rsync.

Kopieren Sie einfach eine Verzeichnisstruktur rekursiv an einen neuen Speicherort:

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

Sie sollten dafür nicht verwenden cp. Wie andere gesagt haben, ist es nicht das richtige Werkzeug für den Job. Das richtige Werkzeug wird von Ihren Zielen abhängen.

Wenn Sie nur eine gerade Kopie möchten:

rsync /source /destinationmit einigen Ebenen von Flags. In den anderen Antworten finden Sie einige wirklich gute Beispiele.

Wenn Sie bidirektionale Updates wünschen

unisonist der Weg zu gehen. Rsync ist bei der Konfliktlösung mit bidirektionalen Synchronisierungen nicht besonders gut. Wird speziell gelöscht. Sie möchten also, dass bidirektionale Kopien ausgelöst werdenunison

Wenn Sie Sicherungskopien erstellen möchten und die Dateien textbasiert sind, können Sie versuchen, sie zu verwenden git. Git kann lokal ausgeführt werden, es wird kein "Server" benötigt. Git-Server sind eigentlich nur Dateifreigabemethoden. Sie könnten ein Git-Repo auf dem Backup-Laufwerk haben und es "pushen". Auch dies funktioniert nur dann wirklich, wenn die Dateien textbasiert sind und Sie versuchen, eine Einweg-Sicherung zu erhalten.

Wenn Sie erneut ein Backup anstreben (und nicht nur ein einziges Mal), schauen Sie sich Deja-Dupe, BackIntime oder ähnliche Optionen an. Sie machen zu einem bestimmten Zeitpunkt Schnappschüsse der Daten. Sie laufen alle unter der Haube rsync.

coteyr
quelle
4

Sie können auch alle Dateien erneut kopieren, bei jedem Überschreiben eine Bestätigung anfordern und die Frage dann automatisch mit Nein beantworten:

yes n | cp -i /source /dest

(Sie haben wahrscheinlich mehr Optionen verwendet, wie -r, also fügen Sie sie einfach hinzu, wie cp -pri /source /dest...)

Ned64
quelle
3

Verwenden Sie den Befehl rsyncmit den folgenden Optionen:

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