Comment cp les fichiers restants après une tentative infructueuse

23

J'essaie de copier un grand répertoire d'un lecteur à un autre. Je me suis déconnecté par erreur avant la fin, donc seulement environ 80% des fichiers ont été copiés. Est-il possible de copier les fichiers restants sans recommencer à zéro?

barro32
la source

Réponses:

35

Je voudrais essayer,

rsync -a /from/file /dest/file

vous pouvez utiliser d' autres options comme --append, -P (--partial --progress). Voir man rsync pour plus d'informations.

Ou si vous utilisez, cputilisez 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
la source
1
Je vais devoir le donner à Rahul car il vous a juste battu, mais merci et tout le monde obtient un vote positif!
barro32 du
3
Si la première copie se termine brutalement, l'un des fichiers peut être copié seulement partiellement, et cp -upeut ne pas s'en soucier, car il ne vérifie que les horodatages, pas la taille ... Donc, vous devez d'abord touchles fichiers source si vous devez l'utiliser . (Ou utilisez simplement rsync.)
ilkkachu
@ilkkachu c'est vrai. Je vais le mettre à jour bientôt.
Rahul
Est-ce que cp ne laisse jamais un seul fichier partiellement transféré? Si c'est le cas, alors -u semble vous laisser un répertoire qui ne fonctionnait que partiellement.
Trevor
15

Pour les transferts de fichiers partiels, cpce n'est peut-être pas ce dont vous avez besoin.

Je suggère d'utiliser à la rsyncplace. Même lorsque le transfert échoue, vous pouvez simplement réexécuter la commande ultérieurement, et elle ne copiera que les fichiers manquants.

Exemple:

$ rsync -aPEmivvz from/ to/

(copiera from/dans le to/répertoire)

Étant donné rsyncque la synchronisation et la vérification après chaque transfert, garantir que les fichiers ont été copiés correctement est triviale.

L'ensemble swich -aPEmivvzest le standard aller à la sélection, à chaque fois que la copie de fichiers sur des réseaux ou des disques externes, y compris les appareils plug-in, comme des cartes SD, etc.

Ce sont les commutateurs que j'utilise presque toujours:

-a: "archive", inclut -rlptgo(récursif, liens symboliques en tant que liens symboliques, autorisations, heures, groupe, propriétaire)

-P: "progression partielle" montre une belle barre de progression pour chaque fichier

-E: "l'exécutabilité" conserve l'exécutable ou non

-m: "noempty" élague les dires vides

-i: "résumé" imprimer le résumé des modifications pour toutes les mises à jour

-vv: "plus verbeux"

-z: "compression"

polémon
la source
6

Ce que vous voulez probablement plutôt que cpdans ce cas, c'est rsync.

Copiez simplement récursivement une structure de répertoires vers un nouvel emplacement:

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

Vous ne devez pas l'utiliser cppour cela. Comme d'autres l'ont dit, ce n'est pas le bon outil pour le travail. L'outil correct va dépendre de vos objectifs.

Si vous voulez juste une copie directe:

rsync /source /destinationavec un certain niveau de drapeaux. Voir les autres réponses pour de très bons exemples.

Si vous souhaitez avoir des mises à jour bidirectionnelles

unisonest la voie à suivre. Rsync ne réussit pas très bien dans la résolution des conflits avec les synchronisations bidirectionnelles. Supprime spécialement. Donc, vous voulez que des copies bidirectionnelles se déclenchentunison

Si vous souhaitez des sauvegardes et que les fichiers sont basés sur du texte, vous pouvez essayer d'utiliser git. Git peut être exécuté localement, il n'y a pas besoin de "serveur". En fait, les serveurs git ne sont que des méthodes de partage de fichiers. Vous pouvez totalement avoir un dépôt git sur le lecteur de sauvegarde et y "pousser". Encore une fois, cela ne fonctionne vraiment que si les fichiers sont basés sur du texte et que vous essayez d'obtenir une sauvegarde à sens unique.

Encore une fois, si vous optez pour une sauvegarde (et pas seulement une fois), regardez deja-dupe, BackIntime ou des options similaires. Ils prennent des instantanés des données à un moment donné. Ils exécutent tous rsync sous le capot.

coteyr
la source
4

Vous pouvez également recopier tous les fichiers, demander une confirmation pour chaque écrasement, puis répondre automatiquement non à la question:

yes n | cp -i /source /dest

(vous avez probablement utilisé plus d'options, comme -r, alors ajoutez-les simplement comme cp -pri /source /dest...)

Ned64
la source
3

Utilisez la commande rsyncavec les options suivantes:

rsync --progress --partial --append /source_file /destination_file
GAD3R
la source