Vous avez trois dossiers:
- dossier actuel , qui contient vos fichiers actuels
- dossier ancien , qui contient une ancienne version des mêmes fichiers
- différence de dossier , qui est juste un dossier vide
Comment comparez-vous l' ancien avec l' actuel et copiez les fichiers qui sont différents (ou entièrement nouveaux) dans le courant à la différence ?
J'ai cherché tout autour et cela semble être une chose simple à aborder, mais je ne peux pas le faire fonctionner dans mon exemple particulier. La plupart des sources ont suggéré l'utilisation de rsync , je me suis donc retrouvé avec la commande suivante:
rsync -ac --compare-dest=../old/ new/ difference/
Cependant, cela copie tous les fichiers du nouveau vers la différence , même ceux qui sont les mêmes que dans l' ancien .
Au cas où cela aiderait (peut-être que la commande est correcte et que la faute est ailleurs), voici comment j'ai testé ceci:
- J'ai fait les trois dossiers.
- J'ai fait plusieurs fichiers texte avec des contenus différents en ancien .
- J'ai copié les fichiers de l' ancien vers le nouveau .
- J'ai changé le contenu de certains fichiers dans de nouveaux fichiers et ajouté quelques fichiers supplémentaires.
- J'ai exécuté la commande ci-dessus et vérifié les résultats dans la différence .
Je cherchais une solution depuis quelques jours et j'apprécierais vraiment de l'aide. Il ne doit pas nécessairement utiliser rsync, mais j'aimerais savoir si je me trompe si possible.
Réponses:
Je ne sais pas si vous pouvez le faire avec des commandes Linux existantes telles que rsync ou diff. Mais dans mon cas, j'ai dû écrire mon propre script en utilisant Python, car python a le module "filecmp" pour la comparaison de fichiers. J'ai posté l'intégralité du script et de son utilisation sur mon site personnel - http://linuxfreelancer.com/
Son utilisation est simple - donnez-lui le chemin absolu du nouveau répertoire, de l'ancien répertoire et du répertoire de différence dans cet ordre.
la source
J'ai compris quel était le problème dans mon cas:
Les fichiers que je comparais avaient des horodatages différents. Je n'aurais pas dû utiliser l' argument -a , je suppose que rsync essayait de conserver les horodatages lors de la copie des fichiers. La commande qui a fonctionné pour moi était:
la source
rsync -a
pour "copier" les fichiers initialement (ou l'équivalent cp), puis supprimés ou modifiés. (J'aime m'en tenir à rsync parce que je sais qu'il est cohérent sans penser à ce qu'il pourrait faire.) Je pense que cela aurait dû fonctionner avec la commande d'origine. L'option -a inclut -t (comparer par horodatage), qui est l'alternative à -c (comparer par somme de contrôle).old/
etnew/
.Cela pourrait aider certains lecteurs: sous Windows, un petit programme gratuit plus ancien - Third Dir - fait exactement ce qui est demandé ici. Il n'est plus disponible via le développeur, Robert Vašíček. Mais je suis sûr qu'il peut être trouvé via certains référentiels en ligne.
Voici la description du développeur, qui reste sur son site:
Troisième Dir: Un synchroniseur de répertoire inhabituel - les différents fichiers sont copiés dans le troisième répertoire. Il est très utile d'extraire, par exemple, des photos nouvelles ou modifiées d'une immense arborescence de répertoires sur un disque fixe vers un dossier temporaire, puis de les ajouter au CD d'archivage (remarque - les fichiers originaux sont comparés au CD). Version 1.4, taille 23kB. Créé le 2005-02-12.
Historique: Version 1.14 - Plus efficace lorsque plusieurs dizaines de milliers de fichiers sont comparés.
la source
La manière rsync donnée par Thane avec les ajouts de Yamaneko fonctionne très bien mais laisse des répertoires vides. Pour moi, la solution finale était en deux étapes, appelez d'abord rsync avec le chemin complet, puis une commande find pour supprimer tous les répertoires vides:
Veuillez noter que même avec l'option --links, rsync n'a pas conservé les liens symboliques mais a copié les données de destination à la place.
la source
-empty -exec rmdir {} \;
vous pouvez utiliser-empty -delete
.J'utilise l'explorateur XY dualpane (commercial), qui peut faire beaucoup de tours et c'est l'un d'entre eux. Ouvrez
Current
dans un volet et ancien dans l'autre. Activez le volet Actuel. Allez dans Volets > Sync Select. Il vous donne 5 options pour sélectionner:Vous pouvez maintenant copier la sélection résultante de l'
Current
endroit où vous le souhaitez. Je l'ai utilisé pour comparermailfolders
d'anciennes installations avec les dernières. La structure des dossiers était assez complexe, mais (presque) tousmbs-files
avaient un numéro unique.J'ai donc fait une recherche sur
mbs-files
l'ancienne racinemailfolder
(dans un volet) ainsi que sur la plus récente (dans l'autre volet) et j'ai fait une comparaison sur les résultats de la recherche dans chaque volet ( Sync Select Unique , pour trouver les courriers manquants pendant réinstalle)! Vous pouvez également définir de nombreuses options.la source