Synchroniser certains documents sur un disque externe

Hello,

J’utilise un lecteur multimédia et j’aimerais synchroniser ma musique en fonction d’une liste de lecture. Alors vous me direz que Rhythmbox le fait très bien, c’est vrai. Le seul problème c’est que j’ai pas trouvé comment lui dire de synchroniser dans un répertoire particulier, il balance tout à la racine et j’aime pas trop ça…
Du coup je me suis dit que c’est pas compliqué de faire une petite commande rsync --files-from avec ma liste de lecture. Le seul truc c’est que si je fais comme ça, il ne supprime pas les fichiers qui ne sont pas dans ma liste de lecture, ce qui n’est pas top.
Du coup j’ai essayé plein d’options pour arriver à faire une sorte de “white list” dans rsync, mais sans succès.
La commande qui fonctionne sans supprimer c’est ça:

cleanPlaylist $1                                                                        
rsync -avvz --stats --progress --delete --files-from=tmp.m3u /media/HDD1 
/musique/ /media/raghnarok/RAGHNAROK\'S/music                                                   
rm -f tmp.m3u 

Quelqu’un a une petite idée?

Bonjour,

Avec l’option [mono]–delete-excluded[/mono] de rsync ?

[quote=“P’tit g”]Bonjour,

Avec l’option [mono]–delete-excluded[/mono] de rsync ?[/quote]
Non plus…
En fait, apparemment le problème c’est que rsync synchronise des répertoires alors que si je lui passe une liste de fichiers il travaille plus avec les répertoires… Du coup j’aimerais bien pouvoir lui dire d’exclure tout sauf certains fichiers, mais je trouve pas comment faire.

Je remplacerais bien [mono]–files-from[/mono] par [mono]–include-from[/mono], toujours avec l’option [mono]–delete-excluded[/mono] (et peut-être un [mono]–exclude=**[/mono] ou quelque chose comme ça).

Pourquoi la double *? Quelle est la différence avec un simple *?

Du coup je synchronise plus rien là…

[quote="“man rsync”"]–exclude-from=FILE read exclude patterns from FILE[/quote]Il faut donc que tu créé un fichier texte (nommé “FILE” dans l’exemple) contenant la liste (chemin absolut) des fichiers (un par ligne) que tu ne veux pas synchroniser.

EDIT: OOps, c’est pas ce que tu voulais, c’est plutôt le complément de ce que je propose…
Désolé… je cherche

Euh oui… Sauf que j’ai une bibliothèque musicale de taille correcte, donc faire un fichier avec la liste de tout juste pour ça… Faudrait faire un exclude de tout suivi d’un include de ce que je veux? Ça fait lourd.

EDIT: Pas de soucis :stuck_out_tongue:

Donc :

[quote="“man rsync”"]–files-from=FILE read list of source-file names from FILE[/quote]Il faut donc que tu créé un fichier texte (nommé “FILE” dans l’exemple) contenant la liste (chemin absolut) des fichiers (un par ligne) que tu veux synchroniser.

[quote=“MicP”]Donc :

Alors, j’ai trouvé un début de solution:

rsync -av --stats --progress --delete --include="*/" --include-from=tmp.m3u --exclude=" *" --delete-excluded /media/HDD1/musique/ /media/raghnarok/RAGHNAROK\'S/music
La je synchronise tous mes fichiers contenus dans ma playlist tmp.m3u, le seul soucis c’est que ça synchronise tous les répertoires (logique…).

  • reconnait une suite de caractères sans /
    ** reconnait une suite de caractères pouvant contenir /

[quote=“manpages.debian.net”]a ‘*’ matches any path component, but it stops at slashes.
use ‘**’ to match anything, including slashes.[/quote]
http://manpages.debian.net/cgi-bin/man.cgi?query=rsync&apropos=0&sektion=0&manpath=Debian+7.0+wheezy&format=html&locale=en

Bon alors, j’ai une méthode dégeulasse mais qui fonctionne:

cleanPlaylist(){                                                                                
  sed 's/\/home\/raghnarok\/Musique\///g' $1 > $2                                         
}                                                                                               
                                                                                                
syncMultimedia(){                                                                               
  emptyRep=~/tmp/emptyRep.txt                                                             
  tmpPlaylist=~/tmp/tmp.m3u                                                               
  cleanPlaylist $1 $tmpPlaylist                                                           
  rsync -av --stats --progress --delete --include="*/" --include-from=$tmpPlaylist --exclude="*" --delete-excluded /media/HDD1/musique/ /media/raghnarok/RAGHNAROK\'S/music              
  find /media/raghnarok/RAGHNAROK\'S/music -type d -empty > $emptyRep                     
  while [ -s $emptyRep ]                                                                  
  do                                                                                      
    cat $emptyRep | while read LINE;                                                        
    do                                                                                      
      rmdir "$LINE"                                                                   
    done                                                                                    
    find /media/raghnarok/RAGHNAROK\'S/music -type d -empty > $emptyRep                     
  done                                                                                    
  rm -f $emptyRep $tmpPlaylist                                                            
}   

Ouais en fait non, ça supprime pas du tout ce qui n’est pas dans la liste de lecture…
Du coup j’ai pas d’idée là maintenant :frowning:

Bon bah du coup, j’ai fait un petit script pour ça.

Je vous laisse jeter un oeil si jamais ça intéresse quelqu’un.
À priori ça fait ce que je veux, ce qui est déjà pas mal.

P.S.: On peut pas joindre un fichier .sh? Du coup j’ai fait un .txt pour pouvoir l’envoyer.
syncMultimedia.txt (3.85 KB)