Cela place le dossier A dans le dossier B :
rsync -avu --delete "/home/user/A" "/home/user/B"
Si vous voulez le contenu des dossiers A et B pour être le même, mettre /home/user/A/
(avec la barre oblique) comme source. Cela ne prend pas le dossier A mais tout son contenu et le place dans le dossier B. Comme ceci :
rsync -avu --delete "/home/user/A/" "/home/user/B"
-a
Effectuez la synchronisation en préservant tous les attributs du système de fichiers-v
exécuter de manière détaillée-u
copier uniquement les fichiers avec une heure de modification plus récente (ou une différence de taille si les heures sont égales)--delete
supprimer les fichiers du dossier cible qui n'existent pas dans la source
Page de manuel :https://download.samba.org/pub/rsync/rsync.html
Vous pourriez unison
outil développé par Benjamin Pierce à U Penn.
Supposons que vous ayez deux répertoires,
/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 répertoire et fichier qui est différent dans les deux répertoires que vous avez demandé à synchroniser. Il recommandera de synchroniser de manière additive (répliquer le fichier manquant aux deux emplacements) 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 suivantes, il implémentera une véritable synchronisation (c'est-à-dire si vous supprimez un fichier de .../dirA
, il sera supprimé de .../dirB
aussi bien. Vous pouvez également comparer chaque modification et éventuellement choisir de transférer ou inverser synchroniser entre les deux répertoires.
Optionnellement, pour lancer l'interface graphique, il suffit de supprimer le -ui text
option de votre commande, bien que je trouve le cli
plus simple et plus rapide à utiliser.
Pour en savoir plus :Tutoriel Unison sur la documentation utilisateur Unison.
La réponse de TuxForLife est plutôt bonne, mais je vous suggère fortement d'utiliser -c
lors de la synchronisation locale. Vous pouvez affirmer que cela ne vaut pas la peine de perdre du temps/du réseau pour les synchronisations à distance, mais cela en vaut vraiment la peine pour les fichiers locaux car la vitesse est si grande.
-c, --checksum This forces the sender to checksum every regular file using a 128-bit MD4 checksum. It does this during the initial file-system scan as it builds the list of all available files. The receiver then checksums its version of each file (if it exists and it has the same size as its sender-side counterpart) in order to decide which files need to be updated: files with either a changed size or a changed checksum are selected for transfer. Since this whole-file checksumming of all files on both sides of the con- nection occurs in addition to the automatic checksum verifications that occur during a file's transfer, this option can be quite slow. Note that rsync always verifies that each transferred file was correctly reconstructed on the receiving side by checking its whole-file checksum, but that automatic after-the-transfer verification has nothing to do with this option's before-the-transfer "Does this file need to be updated?" check.
Cela montre à quel point le fait d'avoir la même taille et les mêmes horodatages peut vous échouer.
La configuration
$ cd /tmp
$ mkdir -p {A,b}/1/2/{3,4}
$ echo "\___________from A" | \
tee A/1/2/x | tee A/1/2/3/y | tee A/1/2/4/z | \
tr A b | \
tee b/1/2/x | tee b/1/2/3/y | tee b/1/2/4/z | \
tee b/1/2/x0 | tee b/1/2/3/y0 > b/1/2/4/z0
$ find A b -type f | xargs -I% sh -c "echo %; cat %;"
A/1/2/3/y
\___________from A
A/1/2/4/z
\___________from A
A/1/2/x
\___________from A
b/1/2/3/y
\___________from b
b/1/2/3/y0
\___________from b
b/1/2/4/z
\___________from b
b/1/2/4/z0
\___________from b
b/1/2/x
\___________from b
b/1/2/x0
\___________from b
Le rsync qui ne copie rien car les fichiers ont tous la même taille et le même horodatage
$ rsync -avu A/ b
building file list ... done
sent 138 bytes received 20 bytes 316.00 bytes/sec
total size is 57 speedup is 0.36
$ find A b -type f | xargs -I% sh -c "echo %; cat %;"
A/1/2/3/y
\___________from A
A/1/2/4/z
\___________from A
A/1/2/x
\___________from A
b/1/2/3/y
\___________from b
b/1/2/3/y0
\___________from b
b/1/2/4/z
\___________from b
b/1/2/4/z0
\___________from b
b/1/2/x
\___________from b
b/1/2/x0
\___________from b
Le rsync qui fonctionne correctement car il compare les sommes de contrôle
$ rsync -cavu A/ b
building file list ... done
1/2/x
1/2/3/y
1/2/4/z
sent 381 bytes received 86 bytes 934.00 bytes/sec
total size is 57 speedup is 0.12
$ find A b -type f | xargs -I% sh -c "echo %; cat %;"
A/1/2/3/y
\___________from A
A/1/2/4/z
\___________from A
A/1/2/x
\___________from A
b/1/2/3/y
\___________from A
b/1/2/3/y0
\___________from b
b/1/2/4/z
\___________from A
b/1/2/4/z0
\___________from b
b/1/2/x
\___________from A
b/1/2/x0
\___________from b