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?

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


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.


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é


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.