Synchronisez deux dossiers locaux dans bash

23

J'ai un gros dossier «X» dans mon répertoire personnel et une copie obsolète de celui-ci sur un lecteur flash - Y. De quoi est l'analogue rm Y; cp X Y, mais sans écraser les fichiers déjà existants?

Jofsey
la source

Réponses:

26

Il y a beaucoup plus de propriétés à rsync que ne le mentionne la réponse précédente. Vous devriez les examiner vous-même:

man rsync

Mais pour votre problème, je suggère:

rsync -a --delete X Y

De cette façon, le récepteur (Y) supprimera tout fichier dont il dispose qui n'est pas dans X. Assurez-vous cependant de bien le faire. Utilisé incorrectement car root peut facilement tuer votre système ... :)

Mattias Åslund
la source
1
Convenez que vous devez être très prudent avec cela. Essayez d'ajouter --dry-run à la commande pour voir ce qui se passera sans apporter de modifications. Si ça se passe bien, faites la même commande sans --dry-run
squarecandy
Une petite correction qui m'a fallu un certain temps pour atteindre: rsync -a --delete X/ Y. Cette petite barre oblique après que X l'ait fait fonctionner comme prévu pour moi, donc cela pourrait aussi aider les autres. Expliqué ici: abbeyworkshop.com/howto/unix/nix_rsync/index.html
Shovalt
15

Jetez un œil à rsync (1) . Il est destiné à faire à peu près exactement ce que vous voulez.

rsync -av X Y

Il prend en charge la copie à distance, via son propre protocole ou ssh, mais il peut également être utilisé localement.

Selon le comportement exact que vous souhaitez, vous pouvez également passer l' --updateoption. Cela indiquera à rsync de ne pas écraser les fichiers qui existent déjà sur la cible et sont plus récents que ceux de la source.

Si vous souhaitez supprimer des fichiers supplémentaires (c'est-à-dire des fichiers qui existent en Y mais pas en X), vous pouvez ajouter l' --deleteoption.

Kristof Provost
la source
Mais il ne supprimera pas les fichiers, que supprimé dans X, tout en rm Y; cp X Yle faisant.
Afin de supprimer les fichiers supprimés de X, utilisez l'option --delete.
csonuryilmaz du
0

Essayez d'utiliser rsnyc, éventuellement avec la commande suivante:

rsync -avzu /home/x /y

-u = ne pas écraser un fichier à destination, s'il est modifié

bwDraco
la source
Mais il ne supprimera pas les fichiers, que supprimé dans X, tout en rm Y; cp X Yle faisant.
0

Je pense que certaines des fonctionnalités que vous recherchez dans l'option -u (mise à jour) existent réellement dans cette option:

"--ignore-existing" - sauter la mise à jour des fichiers qui existent sur le récepteur

promet
la source