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).

janesconference
la source
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/

Tog
la source
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

nouveau123456
la source
+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.

Digitalcraig
la source
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/*
Sven Croon
la source
1

Vous pouvez différencier les 2 répertoires.

diff -r dir1 dir2

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

Oleg
la source