Comment puis-je copier un (gros) répertoire sur un autre en ne modifiant que les fichiers qui diffèrent?


14

J'ai le répertoire a et le répertoire b. Ils sont grands. b est presque identique à a. "presque" signifie que 4 à 5 fichiers diffèrent, et je ne sais pas de quoi il s'agit. Je veux copier b sur a, mais seulement les fichiers qui diffèrent. je suis en bash.

(non, je ne peux pas simplement supprimer a et le remplacer par b, car 1) a est contrôlé par version 2) une copie complète (ou un mv) prendrait trop. Je veux copier uniquement les fichiers qui diffèrent).


Est rsyncune option?
Bobby

C'est vrai, mais je ne connais pas grand-chose à rsync.
janesconference

Réponses:


17

Vous pouvez utiliser rsyncpour ce faire, la commande que j'utilise estrsync -tr "folder to copy from" "folder to copy to"

par exemple rsync -tr /home/me/stuff/* /home/me/otherstuff/


1
ATTENTION à cette commande. Il supprimera tous les fichiers qui ne différeront pas. Je l'ai couru et j'ai PERDU presque tout !!
Arvind K.

@Arvind Je ne sais pas quelle commande vous avez utilisée qui vous a fait perdre vos données mais ce n'était pas rsync -tr. Lisez la page de manuel.
Tog

18

Il est également possible de le faire avec du bon vieux cp:

Merci à srcspider de m'avoir rappelé de l'utiliser -T!

cp -ruT old-dir new-dir


+1 Je m'habitue tellement à synchroniser sur des machines que j'oublie les manières élégantes
Tog

ne fonctionne pas pour moi :(
janesconference

C'est en fait un bon gnu cp. ;-)
Keith

1
Sous OS X, l'option -u n'existe pas. J'ai simplement utilisé cp -r old-dir new-dir, car je n'avais pas à comparer les dates.
Jean-François Beauchamp

Ne marche pas. Je ne sais pas s'il s'agit d'une convention de nom, mais cp -ru dossier-A dossier-B copiera simplement le dossier-A à l'intérieur du dossier-B et non pas le contenu de A à l'intérieur de B et l'écrasera, ce qui serait l'effet souhaité.
srcspider

1

Une autre bonne option est Unison ( http://www.cis.upenn.edu/~bcpierce/unison/ ), surtout s'il n'y a pas vraiment de "source" et de "destination". Chaque répertoire est une racine et Unison les synchronise et conserve les métadonnées pour les futures synchronisations. Il offre à la fois une ligne de commande et une option GUI qui peuvent également être facilement planifiées via cron.

Je l'utilise pour faire une sauvegarde de ma Dropbox sur mon appareil NAS local qui ne peut pas exécuter un client Dropbox.


1

Cela peut être fait avec un bon vieux cp, mais avec un format légèrement différent de celui indiqué ci-dessus. Voici comment je l'ai fait:

cp -ru --target-directory="destination_path" source_path/*

1

Vous pouvez différencier les 2 répertoires.

diff -r dir1 dir2

il vous montrera la liste des fichiers qui sont différents

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.