Synchroniser sans numériser des fichiers individuels?

Considérons deux répertoires:

 / home / utilisateur / musique / flac
 / media / MUSIC / flac

Je voudrais que le second répertoire (destination, une clé USB) contienne les mêmes fichiers et la même structure que le premier répertoire (master). Il y a plus de 3600 fichiers (59G au total). Chaque fichier est analysé à l’ unisson , ce qui est extrêmement lent. Je préférerais qu’il se compare en fonction du nom du fichier, de sa taille et de l’heure de modification.

Je pense que rsync pourrait être mieux, mais les exemples des pages de manuel sont plutôt cryptiques, et les recherches sur Google n’ont révélé aucun exemple simple et perspicace. Je préférerais ne pas effacer accidentellement des fichiers dans le master. 😉

La liste principale changera au fil du temps: réorganisation des répertoires, ajout de nouveaux fichiers et mise à jour des fichiers existants (par exemple, re-tagging). Généralement, les modifications sont mineures. prendre des heures pour terminer une synchronisation me semble sous-optimale.

Quelle est la commande exacte pour synchroniser le répertoire de destination avec le maître?

La commande doit copier les nouveaux fichiers, réorganiser les fichiers déplacés (ou les supprimer, puis les copier) et copier les fichiers modifiés (en fonction de la date). Les fichiers de destination doivent avoir leur horodatage défini sur l’horodatage du maître.

Vous pouvez utiliser rsync de cette façon:

rsync --delete -r -u /home/user/music/flac/* /media/MUSIC/flac 

Il supprimera les fichiers dans / media / MUSIC / flac (jamais sur master) et les mettra à jour en fonction de la date du fichier.

Il y a plus d’options, mais je pense que cela vous suffit. 🙂

(Je viens de faire des tests simples! S’il vous plaît tester mieux!)

Vous pouvez utiliser le vieux cp simple pour copier les fichiers nouveaux et modifiés (tant que vos systèmes de fichiers ont des horodatages de travail):

 cp -dpRuv /home/user/music/flac /media/MUSIC/ 

Pour supprimer des fichiers de la destination qui n’existent pas à la source, vous devez utiliser find. Créez un script /home/user/bin/remover.sh comme /home/user/bin/remover.sh :

 #!/bin/bash CANONNAME="$PWD/$(basename $1)" RELPATH=$(echo "$CANONNAME" | sed -e "s@/media/MUSIC/flac/@@") SOURCENAME="/home/user/music/flac/$RELPATH" if [ ! -f "$SOURCENAME" ]; then echo "Removing $CANONNAME" rm "$CANONNAME" fi 

Rendez-le exécutable, puis lancez-le à partir de find :

 find /media/MUSIC/flac -type f -execdir /home/user/bin/remover.sh "{}" \; 

La seule chose que cela ne suffira pas à faire est de supprimer les répertoires de la destination qui ont été supprimés dans la source – si vous le souhaitez, vous devrez également effectuer un troisième passage, avec une combinaison find / script similaire.