Comment synchroniser deux dossiers avec des outils de command line?

Après avoir migré vers Linux à partir de Windows, je voudrais find un logiciel alternatif à Winmerge ou plutôt apprendre des outils en command line pour comparer et synchroniser deux dossiers sur Linux. Je vous serais reconnaissant si vous pouviez me dire comment faire les tâches suivantes sur la command line … (J'ai étudié diff et rsync, mais j'ai toujours besoin d'aide.)

Nous avons deux dossiers: "/ home / user / A" et "/ home / user / B"

Le dossier A est l'endroit où les files et dossiers sont enregistrés et le dossier B est un dossier de sauvegarde qui sert de miroir complet du dossier A. (Rien n'est directement enregistré ou modifié par l'user dans le dossier B.)

Mes questions sont les suivantes:

  • Comment listr les files existant uniquement dans le dossier B? (Par exemple celles supprimées du dossier A depuis la dernière synchronisation.)

  • Comment copyr des files qui existent uniquement dans le dossier B dans le dossier A?

  • Comment répertorier les files qui existent dans les deux dossiers mais qui ont des horodatages ou des tailles différents? (Ceux qui ont été modifiés dans le dossier A depuis la dernière synchronisation, je voudrais éviter d'utiliser des checksums, car il y a des dizaines de milliers de files et cela rendrait le process trop lent.)

  • Comment faire une copy exacte du dossier A dans le dossier B? Je veux dire, copyr tout du dossier A dans le dossier B qui n'existe que dans le dossier A et supprimer tout du dossier B qui n'existe que dans le dossier B, mais sans toucher les files qui sont les mêmes dans les deux dossiers.

rsync -avz --delete "/home/user/A" "/home/user/B" 

Explication par SonicARG

-a Faire la synchronisation en conservant tous les attributes du système de files

-v couramment verbeux

-z compresser datatables pendant la synchronisation (transporter datatables en mode compressé)

--delete supprime les files du dossier cible qui n'existent pas dans la source, / home / user / A: dossier source, / home / user / B: dossier cible

Vous pourriez unison outil développé par Benjamin Pierce à U Penn.

Supposons que vous avez deux directorys,

/home/user/Documents/dirA/ et /home/user/Documents/dirB/

Pour synchroniser ces deux, vous pouvez utiliser:

~ $ unison -ui text /home/user/Documents/dirA/ /home/user/Documents/dirB/

En sortie, unison affichera chaque directory et file différent dans les deux directorys que vous avez demandé à synchroniser. Il vous reordera de synchroniser de manière additive (répliquer le file manquant dans les deux locations) lors de l'exécution initiale, puis de créer et de maintenir une arborescence de synchronisation sur votre machine et, lors des exécutions ultérieures, il implémentera la vraie synchronisation .../dirA , il sera également supprimé de .../dirB Vous pouvez également comparer chaque changement et éventuellement choisir de transférer ou de synchroniser l' inverse entre les deux directorys.

En option, pour lancer l'interface graphique, supprimez simplement l'option -ui text de votre command, bien que je trouve le cli plus simple et plus rapide à utiliser.

Plus d'informations sur ce sujet: tutoriel Unison à la documentation user Unison .

Ce n'est pas tout à fait la même chose que ce que vous requestz, mais vous pourriez envisager d'utiliser un outil de contrôle de version. Des outils comme Git font tout ce que vous requestz, et plus encore, surtout si vous ne travaillez pas directement dans le dossier B, il pourrait être intéressant de le regarder. vous pouvez find plus d'informations sur git ici