Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/03/2023, à 14:30

Jarodd

[Résolu] rsync et paramètre --exclude

Bonjour,

J'ai mis dans ma crontab une commande rsync pour faire une sauvegarde régulière de mes documents, qui fonctionne bien. Ma commande :

rsync --progress --stats -avv --delete --exclude={'*.part','*.ytdl','*.mp4','*.mkv','*.git*'} /home/jarodd/Documents/ /path/to/dest/Documents > /path/to/logs/rsync.log 2>&1

Mais j'ai remarqué que l'option pour exclure des fichiers spécifiques (par leurs extensions) ne fonctionne pas.

Dans le man de rsync je lis ceci :

      --exclude=PATTERN
              This option is a simplified form of the --filter option that defaults to an exclude rule and does not allow the full rule-parsing syntax of normal filter rules.
...
       Here are some examples of exclude/include matching:
       o      "- *.o" would exclude all names matching *.o
       o      "- /foo" would exclude a file (or directory) named foo in the transfer-root directory
       o      "- foo/" would exclude any directory named foo
       o      "- /foo/*/bar" would exclude any file named bar which is at two levels below a directory named foo in the transfer-root directory
       o      "- /foo/**/bar" would exclude any file named bar two or more levels below a directory named foo in the transfer-root directory
       o      The combination of "+ */", "+ *.c", and "- *" would include all directories and C source files but nothing else (see also the --prune-empty-dirs option)
       o      The  combination of "+ foo/", "+ foo/bar.c", and "- *" would include only the foo directory and foo/bar.c (the foo directory must be explicitly included or it would be excluded by the
              "*")

La syntaxe avec les accolades vient de ce tuto. Je ne l'ai pas retrouvé dans la doc (qui est très longue), elle parle uniquement de passer chaque pattern dans un paramètre --exclude, ce qui revient à faire :

--exclude 'pattern1' --exclude 'pattern2' --exclude 'pattern3'

Mais à terme j'aimerais avoir les patterns dynamiques (car je vais sauvegarder plusieurs dossiers et chacun aura ses propres exclusions), donc j'aimerais avoir un seul paramètre qui spécifie une ou plusieurs extensions.

Quelle est la syntaxe à utiliser ? J'utilise la version 3.1.3 de rsync, est-ce que les accolades sont pour une version supérieure ? J'ai du mal à m'y retrouver pour trouver ces infos.

Merci pour votre aide.

Edit 23/03 : résolu, pour les mp4, l'exclude fonctionne bien. Pour les fichiers git, j'avais dans mon pattern "*.git*", or il fallait mettre ".git" (sans les étoiles).

Dernière modification par Jarodd (Le 23/03/2023, à 21:01)


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#2 Le 08/03/2023, à 14:39

Tawal

Re : [Résolu] rsync et paramètre --exclude

Hello,

Essaie avec cette forme :

--exclude={'- *.part','- *.ytdl','- *.mp4','- *.mkv','- *.git*'}

Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !

Hors ligne

#3 Le 08/03/2023, à 14:53

bruno

Re : [Résolu] rsync et paramètre --exclude

Bonjour,

Je ne vois pas pourquoi cela ne fonctionnerait pas si tu utilises Bash. Le principe est d'utiliser l'expansion des accolades de Bash.
Il faut nous montre le dysfonctionnement sur un exemple.

Pour la syntaxe proposée par Tawal il me semble que ce n'est utile ( - ou +) que si l'on utilise filter à la place d'exclude

EDIT : s'il y a beaucoup d'exclusions il est parfois plus facile d'utiliser un fichier d'exclusions avec --exclude-from.

Dernière modification par bruno (Le 08/03/2023, à 15:00)

Hors ligne

#4 Le 08/03/2023, à 16:23

Jarodd

Re : [Résolu] rsync et paramètre --exclude

Je vais essayer la syntaxe avec le - merci.
Pour le dysfonctionnement, je le vois dans les logs :

...
path/to/file.mp4
...

Et je le vois bien copié dans mon répertoire de destination.


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#5 Le 08/03/2023, à 17:21

bruno

Re : [Résolu] rsync et paramètre --exclude

Je viens de tester une commande similaire avec liste d'exclusions entre accolades, cela a parfaitement fonctionné :

[bruno@aboulafia:~]$ ls -l src
total 0
-rw-rw-r-- 1 bruno bruno 0 mars   8 14:48 truc1
-rw-rw-r-- 1 bruno bruno 0 mars   8 14:48 truc2
-rw-rw-r-- 1 bruno bruno 0 mars   8 14:48 truc3
-rw-rw-r-- 1 bruno bruno 0 mars   8 14:48 truc4.def
-rw-rw-r-- 1 bruno bruno 0 mars   8 14:48 truc5.sic
[bruno@aboulafia:~]$ ls -l dest
total 0
[bruno@aboulafia:~]$ rsync -av --exclude={'*.def','*.s*'} src/ dest/
sending incremental file list
./
truc1
truc2
truc3

sent 237 bytes  received 76 bytes  626,00 bytes/sec
total size is 0  speedup is 0,00
[bruno@aboulafia:~]$ ls -l dest
total 0
-rw-rw-r-- 1 bruno bruno 0 mars   8 14:48 truc1
-rw-rw-r-- 1 bruno bruno 0 mars   8 14:48 truc2
-rw-rw-r-- 1 bruno bruno 0 mars   8 14:48 truc3

Peut-on voir le retour de :

echo $SHELL

et si la commande est dans un script voir au moins le shebang et savoir comment le script et lancé.

Dernière modification par bruno (Le 08/03/2023, à 17:28)

Hors ligne

#6 Le 08/03/2023, à 17:28

Jarodd

Re : [Résolu] rsync et paramètre --exclude

jarodd@ubuntu:~$ echo $SHELL
/bin/bash
jarodd@ubuntu:~$

Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#7 Le 08/03/2023, à 17:30

bruno

Re : [Résolu] rsync et paramètre --exclude

J'ai ajouté après coup :

et si la commande est dans un script voir au moins le shebang et savoir comment le script et lancé.

Parce que la seule raison que je vois pour que l'expansion des accolades ne fonctionne pas, c'est que le script ou la commande ne soit pas exécuté par Bash.

Hors ligne

#8 Le 08/03/2023, à 17:32

Jarodd

Re : [Résolu] rsync et paramètre --exclude

Le début de mon script est :

#!/bin/bash

Mais j'ai lancé la commande rsync manuellement pour savoir si cela venait de mon script ou de la commande elle-même : j'ai constaté le transfert des fichiers mp4 avec la commande rsync directe.

Dernière modification par Jarodd (Le 08/03/2023, à 17:33)


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#9 Le 08/03/2023, à 17:38

bruno

Re : [Résolu] rsync et paramètre --exclude

Et si tu lances ta commande rsync directement dans un terminal ?

N.B. : si les fichiers censés être exclus ont déjà été copiés dans la destination, il faut les supprimer avant de retester.

Et on ne sait jamais tu peux tester le retour de :

echo --exclude={'*.part','*.ytdl','*.mp4','*.mkv','*.git*'}

Dernière modification par bruno (Le 08/03/2023, à 17:39)

Hors ligne

#10 Le 08/03/2023, à 18:36

Jarodd

Re : [Résolu] rsync et paramètre --exclude

Bon, je ne reproduis plus hmm

jarodd@ubuntu:~$ ll *.mp4 2>/dev/null | wc -l
0
jarodd@ubuntu:~$ rsync --progress --stats -avv --delete --exclude={'*.part','*.ytdl','*.mp4','*.mkv','*.git*'} /home/jarodd/Documents/ /path/to/dest/Documents > /home/jarodd/rsync.log 2>&1
jarodd@ubuntu:~$ ll *.mp4 2>/dev/null | wc -l
0
jarodd@ubuntu:~$

Et dans les logs j'ai bien :

[sender] hiding file paht/tp/file.mp4 because of pattern *.mp4

Mais je n'ai pas cette ligne dans les logs du script, donc c'est peut-être lui qui est en cause finalement. Je creuse.


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne

#11 Le 23/03/2023, à 20:46

Jarodd

Re : [Résolu] rsync et paramètre --exclude

Bonjour,
J'ai enfin pris le temps de reprendre le sujet. Pour les mp4, l'exclude fonctionne bien. Pour les fichiers git, j'avais dans mon pattern "*.git*", or il fallait mettre ".git" (sans les étoiles).
Tout fonctionne bien, merci pour le coup de main !


Ubuntu 22.04.3 LTS (64 bits)

Hors ligne