Je commence avec rsync
et j'ai essayé de l'utiliser pour garder deux dossiers sur le système local synchronisés. J'ai un dossier source, dont le contenu change au fil du temps (certains fichiers sont ajoutés, certains changements et certains supprimés) et un dossier cible que je veux presque être un miroir de la source. J'ai donc essayé d'utiliser rsync comme ceci:
rsync -a --delete "${source_dir}" "${target_dir}";
Cela garde le contenu de la cible exactement le même que le contenu de la source. Cependant, j'aimerais pouvoir ajouter des fichiers à la cible et non à la source, mais je ne veux pas qu'ils soient supprimés à chaque fois que je fais rsync. D'un autre côté, les fichiers qui étaient auparavant synchronisés puis supprimés dans la source doivent toujours être supprimés.
Existe-t-il un moyen de le faire sans avoir à modifier la commande pour chaque fichier que je souhaite exclure?
Mise à jour : je dois mentionner que je ne suis pas limité à rsync. Si un autre programme fait le travail, c'est bien aussi. J'ai juste essayé de résoudre ce problème en utilisant rsync.
Réponses:
rsync
a une option appelée--exclude-from
option qui vous permet de créer un fichier contenant une liste de tous les fichiers que vous souhaitez exclure. Vous pouvez mettre à jour ce fichier chaque fois que vous souhaitez ajouter une nouvelle exclusion ou supprimer une ancienne.Si vous créez le fichier d'exclusion à
/home/user/rsync_exclude
la nouvelle commande serait:Lors de la création du fichier de liste d'exclusion, vous devez placer chaque règle d'exclusion sur une ligne distincte. Les exclusions sont relatives à votre répertoire source. Si votre
/home/user/rsync_exclude
fichier contient les options suivantes:secret_file
dans votre répertoire source sera exclu.${source_dir}/first_dir/subdir
seront exclus, mais une version vide desubdir
sera synchronisée.${source_dir}/second_dir
avec un préfixe decommon_name.
seront ignorés. Alorscommon_name.txt
,common_name.jpg
etc.la source
Puisque vous avez mentionné: je ne suis pas limité à rsync:
Script pour maintenir le miroir, permettant d'ajouter des fichiers supplémentaires à la cible
Ci-dessous un script qui fait exactement ce que vous décrivez.
Le script peut être exécuté en mode verbeux (à définir dans le script), qui affichera la progression de la sauvegarde (mise en miroir). Inutile de dire que cela peut également être utilisé pour enregistrer les sauvegardes:
Option détaillée
Le concept
1. Lors de la première sauvegarde, le script:
.recentfiles
2. Sur la sauvegarde suivante et ainsi de suite
.currentfiles
..recentfiles
(répertoriant la situation lors de la sauvegarde précédente) est comparé à.currentfiles
. Seuls les fichiers.recentfiles
qui ne sont pas dans.currentfiles
sont évidemment supprimés de la source et seront supprimés de la cible..currentfiles
est renommé pour.recentfiles
servir le prochain cycle de sauvegarde et ainsi de suite.Le scénario
Comment utiliser
backup_special.py
Modifiez -si vous le souhaitez- l'option détaillée dans la tête du script:
Exécutez-le avec la source et la cible comme arguments:
La vitesse
J'ai testé le script sur un répertoire de 10 Go avec environ 40 000 fichiers et répertoires sur mon lecteur réseau (NAS), il a fait la sauvegarde à peu près en même temps que rsync.
La mise à jour de l'ensemble du répertoire n'a pris que quelques secondes de plus que rsync, sur 40 000 fichiers, ce qui est acceptable et sans surprise, car le script doit comparer le contenu à la dernière sauvegarde effectuée.
la source