Bonjour les fédorés et fédorées!

Une petite question rsync... j'aimerai pouvoir transférer avec rsync tout mes documents vers un autre ordinateur, y compris les calendriers et notes. Je m'explique: lorsque je cherche à transférer mes documents (sans les paramètres) sur un autre ordi, j'exécute un truc du type
rsync -avh --exclude=" .*" $HOME/ moi@machinedistante:~/
et tout est ok jusque là, sauf que mes notes ainsi que mes calendriers sont dans des dossiers cachés... le man rsync ne m'a pas beaucoup aidé... je ne sais pas comment procéder car même en utilisant la syntaxe avancée "--files-from", j'obtiens:
rsync -avh --delete --exclude=".*" --files-from=$HOME/config_perso/filtre_rsync $HOME/ ruso_ale@linmops.sciences.univ-metz.fr:/usr/users/lmops/ruso_ale/
ruso_ale@linmops.sciences.univ-metz.fr's password: 
rsync: on remote machine: -vldogDtpRe.Ls: unknown option
rsync error: syntax or usage error (code 1) at main.c(1084)
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(600) [sender=3.0.5]
... voici le fichier "filtre rsync":
+*basket -.Virtual* -.beagle -/trash/ -/Trash/ -/temporaire/ -.config/monitors.xml -.mozilla/firefox/0s9a9t2q.default/ -.thumbnails/ -.ssh -Manips/*
Je dois raté quelque chose, mais comme je ne vois vraiment pas quoi... me voici à quémander minablement votre aide

Merci d'avance!!!
A mon avis ca vient du --exclude=".*" qui fait que rsync ne tient pas compte de tous les fichiers ou repertoires dont le nom commencent par un point, donc tes fichiers cachés.
Ok, j'en ai bien conscience mais comment faire alors pour exclure TOUS les fichiers ".*" SAUF "~/.kde/share/apps/basket/"???
Génère un fichier contenant toutes tes exclusions puis utilise --exclude-from=FICHIER.

Pour ton fichier , tu peux faire un grep -v share/apps/basket pour que ce répertoire ne soit pas exclu
@proxy:
Génère un fichier contenant toutes tes exclusions puis utilise --exclude-from=FICHIER.
Ok mais ça, ça signifie qu'il faut que je liste tous les fichiers/dossiers que je veux exclure! ça peut être très long...
Par contre je n'ai pas bien saisi ta deuxième ligne... si j'ai bien compris, "grep -v xxx" veut dire "liste tout sauf xxx", ça ok. Mais où dois-je mettre cette commande pour que rsync la prenne en compte? Tu veux que je m'en serve pour lister dans un fichier "exclus" tous les fichiers cachés sauf xxx et qu'en suite je fasse un --exclude-from=exclus? Ça doit marcher mais c'est un peu attrapper les moche avec du vinaigre pour les écraser au marteau, non? J'ai fais un
ls -Ra |grep .* | grep -v basket >exclus
, et ça m'a généré un fichier de 1.5mo!
Et sinon, pour mon erreur
rsync: on remote machine: -vldogDtpRe.Ls: unknown option
rsync error: syntax or usage error (code 1) at main.c(1084)
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(600) [sender=3.0.5]
?
@ heldwin: j'ai regardé le man de rsync sur l'autre machine et effectivement ce n'est pas la même version mais il connait l'option.

Sinon, une autre solution "pas au bazooka"?
Alextazy wrote:@proxy:
Génère un fichier contenant toutes tes exclusions puis utilise --exclude-from=FICHIER.
Ok mais ça, ça signifie qu'il faut que je liste tous les fichiers/dossiers que je veux exclure! ça peut être très long...
Ben non, avec un find , c'est immédiat
Tu fais un find avec la pattern d'exclusion, puis tu fais un grep -v sur ton répertoire spécifique pour l'enlever du fichier des exclusions
Merci proxy, tu as raison, c'est assez rapide, environ 3-4 sec. Je vais tenter ça à ma prochaine sauvegarde et je vous tiens au courant!
Ta solution fonctionne proxy... mais prend beaucoup de temps quand même.

Pour le même transfert de fichiers (en n'ayant rien de plus ou de moins à transférer car tout est à jour), ta méthode prend quelques minutes alors qu'en faisant simplement un <<exclude=".*">> en option de rsync ça prend moins de 3 secondes!

Le find avec grep -v prend 3 sec environ, l'étape "sending incremental file list" prend environ 30sec et la mise à jour en elle-même (qui ne devrait rien faire puisque tout est à jour) prend au moins 3 min...

Et c'est un peu long pour moi car je fais souvent l'aller-retour entre le pc qui contient mon cahier d'expériences ("~/.kde/share/apps/basket/") et les acquisitions d'expériences (autres documents) et le pc avec lequel je traite tout ceci).

Peut-être que je fais quelque chose mal alors voilà les deux scripts :

Celui que j'utilisais avant mais qui ne transfert pas le dossier "~/.kde/share/apps/basket/"
#!/bin/sh
gnome-terminal -e "rsync -avh --delete --exclude-from=FICHIER1 --exclude=".*" $HOME/ moi@machine distante:~/"
FICHIER1 contient d'autres exclusions.

Celui incluant le dossier "~/.kde/share/apps/basket/" mais qui est très long:
#!/bin/sh
gnome-terminal -e "find .* | grep -v .kde/share/apps/basket>FICHIER2"

gnome-terminal -e "rsync -avh --delete --exclude-from=FICHIER1 --exclude-from=FICHIER2 $HOME/ moi@machine distante:~/"
Si vous avez des suggestions/optimisations à proposer...
Tu as beaucoup de lignes dans ton fichier exclude ?

Essaye en ajoutant l'option z (compression) et en enlevant v (verbose)
Tu dois pouvoir aussi limiter la profondeur de recherche du find avec -maxdepth levels
Mon fichier exclude pèse 11.8Mo! Alors, oui, j'ai beaucoup de lignes...

L'option z est pour envoyer les données compressées, non? Pour moi, il n'y avait pas de données à envoyer lors de mon test, c'était juste pour que rsync vérifie si tout est bien à jour, avec seulement le fichier contenant le script à transférer.

Pour le -maxdepth, je suis obligé de mettre "-maxdepth 4" pour qu'il trouve le "~/.kde/share/apps/basket/", ce qui fait que ça n'est pas très allégé...
Tu peux ajouter -type d pour n'avoir que les répertoires.

Autre solution , faire 2 rsyncs successifs :
- le 1 avec un exclude général
- le 2 pour rsync ton répertoire particulier
Peut-être puis-je m'en sortir avec des liens de mon fameux dossier ou quelque chose comme ça, mais je ne sais pas trop comment procéder... une autre chose, l'option -maxdepth retourne des trucs du genre
./.kde
./.kde/Autostart
./.kde/share
./.kde/share/mimelnk
./.kde/share/mimelnk/application
./.kde/share/servicetypes
./.kde/share/apps
./.kde/share/apps/konqueror
./.kde/share/apps/nsplugins
ce qui exclu tout ce qui est dans ".kde"! Donc même cette solution utilisant une liste "filtrée de .Kde/share/apps/basket" ne fonctionne pas...
2 rsync = 2 fois le mot de passe à rentrer et l'admin de la machine distante n'a pas permis les utilisations de clé privée / publique... et je dois donc attendre la fin d'un transfert pour exécuter le 2nd... c'est comme ça que je faisais jusqu'à présent...

Voilà le script:
#!/bin/sh

gnome-terminal -e "rsync -avhz --delete --exclude-from=FICHIER1 --exclude=".*" $HOME/ moi@machinedistante:$HOME/"
gnome-terminal -e "rsync -avhz --delete $HOME/.kde/share/apps/basket/  moi@machinedistante:$HOME/.kde/share/apps/basket/"
Tu ne nous donnes pas toutes les infos !! 🙂

Même si tu veux être synchro en permanence, si tu acceptes l'idée d'avoir des fichiers non deletes sur la machine cible, on peut imaginer ce scénario :
- 1 fois par jour : le rsync avec le filtre et l'option --delete
- n fois par jour : tu récupères la liste des fichiers modifiés avec l'option mtime de find et tu la rsync avec ton serveur (sans l'option --delete)

Tes fichiers modifiés en local sont backupés, par contre si tu les supprimes en local, ils ne seront supprimés du serveur que le lendemain matin
4 jours plus tard
Je veux que ce soit fait "sur commande" et non automatiquement.

Je crois que je vais plutôt créer la liste des fichiers à rsyncer, incluant tous les fichiers/dossier non cachés, ainsi que mon fameux dossiers plus d'autres cachés (les mails de thunderbird) mais je ne sais pas trop comment procéder en fait...
lorsque je fais:
rsync -avh --include-from=$HOME/Bureau/test $HOME/test1/ $HOME/test2/
avec le fichier "test" comme suit
+$HOME/config_perso/
+$HOME/.emerald/
ou
$HOME/config_perso/
$HOME/.emerald/
il ne me prend pas en compte la liste du fichier "test"...
Donc je veux bien faire la liste , j'ai même une idée à coup de find et grep mais malgré la doc (assez bien faite en plus!) je ne comprends pas pourquoi mon fichier de liste n'est pas pris en compte... Me serais-je lourdé qqpart?:roll:
Personne ne sait faire "prendre en compte" à rsync un fichier contenant une liste à transférer?
Le man est super mais ne m'a pas permis d'y parvenir... je dois être un peu limité cérébralement...:hammer:

Qu'est-ce qui "couine" chez moi? Il n'y a aucune erreur après l'exécution de la commande:
rsync -avh --include-from=$HOME/Bureau/test $HOME/test1/ $HOME/test2/
et pourtant rien de ce qui est listé dans le fichier nommé "test" n'est transféré...
Un piti up, si c'est pas abusé, au sujet de mes deux derniers postes... :roll: