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 15/05/2014, à 22:22

omnimax

rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

Bonsoir, je lance régulièrement un script de sauvegarde que je croyais fiable mais dans mes logs je viens de voir ce problème, il n'arrive pas à synchroniser des fichiers avec ce type de syntaxe :

Capture du 2013-03-08 17:41:09.png

Que puis-je faire sans passer par la solution radicale consistant à renommer en masse ce type de fichiers ?


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#2 Le 15/05/2014, à 22:28

Brunod

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

omnimax a écrit :

...
Que puis-je faire sans passer par la solution radicale consistant à renommer en masse ce type de fichiers ?

Nous montrer ton script pour que nous sachions sur quoi on travaille...


Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis

Hors ligne

#3 Le 15/05/2014, à 22:56

tiramiseb

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

Salut,

Je parierais sur une non prise en compte des espaces, une non utilisation des guillemets.

Mais si tu nous montres ton code, on pourra t'en dire plus...

Hors ligne

#4 Le 17/05/2014, à 11:59

omnimax

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

Voilou smile

#!/bin/bash
 
export LANG="fr_BE.UTF-8"
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

#VARIABLES EMPLACEMENTS
SOURCE="/media/omnimax/partage/"
DESTINATION="/media/syst/BC18-980D/080813/" #usb blanc
#DESTINATION="/media/syst/D4B4-BA22/080813/" # usb argenté
LOG="/home/omnimax/"Ubuntu\ One"/log/logsauvegarde"
REP="/home/omnimax/"Ubuntu\ One"/ok"

#VARIABLES MAILS
ADRESSEMAIL="omnimax@gmail.com"

#VARIABLES MESSAGES
TXTMAILOK="sauvegarde effectuée avec succès"
TXTMAILPROBL="problème dans ma sauvegarde, consultez les logs"

#VERIFICATION REP NON VIDE
if [ -d "$DESTINATION" ] || [ -d "$SOURCE" ]; then
	/usr/bin/rsync -rltgoDv --delete --exclude="ubuntu.vdi" "$SOURCE" "$DESTINATION" > "$LOG" && /bin/touch "$REP"
	if [ -e "$REP" ]; then
		/bin/echo "$TXTMAILOK" | msmtp "$ADRESSEMAIL"
	else   
		/bin/echo "$TXTMAILPROBL" | msmtp "$ADRESSEMAIL"
		/bin/echo "$LOG" | msmtp "$ADRESSEMAIL"
	/bin/rm "$REP"		
	fi
fi

14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#5 Le 17/05/2014, à 13:25

tiramiseb

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

Je ne vois pas ce qui cloche, le script semble pouvoir fonctionner correctement... Il n'y a aucun message dans les logs à propos de ce fichier ? Ça dit quoi si tu lances rsync manuellement ?

Trois petites remarques en passant...

1/ tu redéfinis le PATH au début de ton script ; quand on fait ça c'est pour ne pas avoir à utiliser les chemins absolus, alors n'utilise pas les chemins absolus smile  /usr/bin/rsync => rsync, /bin/echo => echo, etc.

2/ pourquoi faire ça :

LOG="/home/omnimax/"Ubuntu\ One"/log/logsauvegarde"
REP="/home/omnimax/"Ubuntu\ One"/ok"

alors que ça, ça marche très bien :

LOG="/home/omnimax/Ubuntu One/log/logsauvegarde"
REP="/home/omnimax/Ubuntu One/ok"

3/ Je trouve tordue ta manière de vérifier que ça a bien fonctionné. Ça, ça suffit :

	rsync -rltgoDv --delete --exclude="ubuntu.vdi" "$SOURCE" "$DESTINATION" > "$LOG"
	if [ $? -eq 0 ]; then
		echo "$TXTMAILOK" | msmtp "$ADRESSEMAIL"
	else   
		echo "$TXTMAILPROBL" | msmtp "$ADRESSEMAIL"
		echo "$LOG" | msmtp "$ADRESSEMAIL"
	fi

Dernière modification par tiramiseb (Le 17/05/2014, à 13:26)

Hors ligne

#6 Le 17/05/2014, à 13:38

Postmortem

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

Salut,
Le disque destination ne serait-il pas formaté en NTFS ou FAT ?
Si c'est le cas, il me semble qu'on ne peut pas nommer des fichiers avec le caractère ":"


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#7 Le 17/05/2014, à 14:31

tiramiseb

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

Bien vu Postmortem, ce serait une explication parfaitement plausible !

Hors ligne

#8 Le 17/05/2014, à 15:31

Postmortem

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

Une petite remarque :

#VERIFICATION REP NON VIDE
if [ -d "$DESTINATION" ] || [ -d "$SOURCE" ]

Ceci ne teste pas si les répertoires sont non vides mais si au moins un des 2 existe. Par exemple, si "$DESTINATION" existe et que "$SOURCE" n'existe pas, tu rentres dans le then et exécute rsync qui plantera.
J'aurais plutôt testé l'existence des 2 ainsi :

if [[ -d $DESTINATION && -d $SOURCE ]]

J'ai volontairement omis les guillemets car s'il n'y a pas d'espaces explicitement mis dans les chemins, entre [[ ]] ça ne posera pas de soucis même si la valeur de $SOURCE ou $DESTINATION en contient (entre simples crochets, il faut par contre les mettre comme tu l'as bien fait).

Et pour le test afin de savoir si rsync est ok, si tu n'utilises pas le code retour plus loin dans ton script, tu peux faire ainsi :

if /usr/bin/rsync -rltgoDv --delete --exclude="ubuntu.vdi" "$SOURCE" "$DESTINATION" > "$LOG" 2>&1
then
   echo "Sauvegarde OK"
else
   echo "Sauvegarde KO"
fi

J'ai aussi rajouté 2>&1 afin d'avoir les messages d'erreurs dans le log ; sans ça, tu n'as que la sortie standard de rsync.

Dernière modification par Postmortem (Le 17/05/2014, à 15:33)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#9 Le 17/05/2014, à 15:53

tiramiseb

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

Bonnes idées Postmortem. J'ajouterais que, vu qu'il n'y a pas de "else" au test d'existence des répertoires, on peut éviter le "if".

Par ailleurs, pourquoi envoyer le texte de problème et le nom du fichier contenant les logs dans deux mails séparés ? Autant intégrer le nom du fichier dans le message...

Allez, pour me changer un peu les idées j'ai passé 5 minutes à compiler nos deux points de vue dans le script suivant :

#!/bin/bash
 
export LANG="fr_BE.UTF-8"
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

#VARIABLES EMPLACEMENTS
SOURCE="/media/omnimax/partage/"
DESTINATION="/media/syst/BC18-980D/080813/"
LOG="/home/omnimax/Ubuntu One/log/logsauvegarde"
#VARIABLES MAILS
ADRESSEMAIL="omnimax@gmail.com"
#VARIABLES MESSAGES
TXTMAILOK="sauvegarde effectuée avec succès"
TXTMAILPROBL="problème dans ma sauvegarde, consultez les logs ($LOG)"

[[ -d "$DESTINATION" && -d "$SOURCE" ]] && if rsync -rltgoDv --delete --exclude="ubuntu.vdi" "$SOURCE" "$DESTINATION" > "$LOG" 2>&1
then
  echo "$TXTMAILOK" | msmtp "$ADRESSEMAIL"
else
  echo "$TXTMAILPROBL" | msmtp "$ADRESSEMAIL"
fi

Attention : code non testé...

(et ça peut probablement être encore simplifié...)

Dernière modification par tiramiseb (Le 17/05/2014, à 16:43)

Hors ligne

#10 Le 17/05/2014, à 16:36

Brunod

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

man rsync :

-s, --protect-args
              This option sends all filenames and most options to the remote rsync  without  allowing  the  remote  shell  to
              interpret them.  This means that spaces are not split in names, and any non-wildcard special characters are not
              translated (such as ~, $, ;, &, etc.).  Wildcards are expanded on the remote host  by  rsync  (instead  of  the
              shell doing it).

              If you use this option with --iconv, the args related to the remote side will also be translated from the local
              to the  remote  character-set.   The  translation  happens  before  wild-cards  are  expanded.   See  also  the
              --files-from option.

-s pour les espaces, --iconv pour les accents
wink
EDIT : Et +1 aussi pour l'hypothèse de Postmortem smile

Dernière modification par Brunod (Le 17/05/2014, à 16:38)


Windows est un système d'exploitation de l'homme par l'ordinateur. Linux, c'est le contraire...
39 pc linux convertis

Hors ligne

#11 Le 17/05/2014, à 22:41

omnimax

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

salut,

merci pour toutes ces explications;

En effet Postmortem a raison mon disque de destination est en fat 32.
donc si je suis l'explication de Brunod

rsync -rltgoDv -s --iconv --delete --exclude="ubuntu.vdi" "$SOURCE" "$DESTINATION" > "$LOG" 2>&1

cette syntaxe résoudra mon souci ?

Dernière modification par omnimax (Le 17/05/2014, à 22:41)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#12 Le 17/05/2014, à 22:52

tiramiseb

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

cette syntaxe résoudra mon souci ?

Non, car il ne renomme pas les fichiers, il dit juste au shell distant de ne pas interpréter les caractères spéciaux.
Je ne crois pas qu'il soit possible de demander à rsync de renommer les fichiers...

Hors ligne

#13 Le 18/05/2014, à 11:24

omnimax

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

salut Brunod, Tiramiseb et Postmortem,

j'ai testé cette syntaxe, elle ne fonctionne pas chez moi

if [[ -d $DESTINATION && -d $SOURCE ]]
./sauvegardeusb: 27: [: missing ]

par contre ceci fonctionne

[ -d "$DESTINATION" ] && [ -d "$SOURCE" ];then 
	if rsync -rltgoDv --delete --exclude="x.vdi" "$SOURCE" "$DESTINATION" > "$LOG" 2>&1; then 	
		echo "$TXTMAILOK" | msmtp "$ADRESSEMAIL"
	else
	echo "$TXTMAILPROBL" | msmtp "$ADRESSEMAIL"
	fi	

mais alors surprise, je ne comprends pas pourquoi il n'accepte pas cette syntaxe ci-dessous plus logique puisque j'ai bien deux conditions que je ferme par fi ?

[ -d "$DESTINATION" ] && [ -d "$SOURCE" ];then 
	if rsync -rltgoDv --delete --exclude="x.vdi" "$SOURCE" "$DESTINATION" > "$LOG" 2>&1; then 	
		echo "$TXTMAILOK" | msmtp "$ADRESSEMAIL"
	else
	echo "$TXTMAILPROBL" | msmtp "$ADRESSEMAIL"
	fi
fi
 fi unexpected 

Dernière modification par omnimax (Le 18/05/2014, à 11:58)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#14 Le 18/05/2014, à 12:04

tiramiseb

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

j'ai testé cette syntaxe, elle ne fonctionne pas chez moi

if [[ -d $DESTINATION && -d $SOURCE ]]

Tu l'as testée de quelle manière ? Comment as-tu exécuté ton script ? as-tu bien utilisé bash comme indiqué dans le shebang ? Ou as-tu lancé avec sh tout court ?

je ne comprends pas pourquoi il n'accepte pas cette syntaxe ci-dessous plus logique puisque j'ai bien deux conditions que je ferme par fi ?

Non tu n'as pas deux "if". Tu n'as pas mis de "if" à la première ligne.

Relis la syntaxe que je propose : je n'utilise pas if/then, j'utilise &&...

Hors ligne

#15 Le 18/05/2014, à 12:21

omnimax

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

Je l'ai exécuté de cette manière et je suis sous zsh

./sauvegardeusb

je pensais que [[ ]] était d'office interprété comme if


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#16 Le 18/05/2014, à 12:30

tiramiseb

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

je pensais que [[ ]] était d'office interprété comme if

Non, c'est une syntaxe particulière de Bash, qui étend les fonctionnalités de "[".

et "[", c'est un alias pour la commande "test"...

if [ $a -eq $b ]

c'est équivalent à :

if test $a -eq $b

je suis sous zsh

Le shell sous lequel tu es n'a rien à voir avec le schmilblick quand tu l'exécutes de cette manière : c'est le shell indiqué dans le shebang qui est utilisé pour interpréter le script : as-tu bien le shebang "#!/usr/bin/bash" en première ligne de ton script ?

Hors ligne

#17 Le 18/05/2014, à 14:09

omnimax

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

en entête j'ai

#!/bin/bash

je viens de tester en mettant l'entête avec

#!/usr/bin/bash

if [[ -d $DESTINATIONBLANC && -d $SOURCE ]]; then
echo ok
fi

résultat identique

[./sauvegardeusb: 22: ./sauvegardeusb: [[: not found 

Part contre, pour les "if et fi x2" je viens de tester cela fonctionne
test avec deux destinations différentes.

if [ -d "$DESTINATIONBLANC" ] && [ -d "$SOURCE" ]; then 
	if rsync -rltgoDv --delete --exclude="x.vdi" "$SOURCE" "$DESTINATIONBLANC" > "$LOG" 2>&1; then 	
		echo "$TXTMAILOK" | msmtp "$ADRESSEMAIL"
	else
	echo "$TXTMAILPROBL" | msmtp "$ADRESSEMAIL"
	cat "$LOG" | msmtp "$ADRESSEMAIL"
	fi
fi	

if [ -d "$DESTINATIONARGENTE" ] && [ -d "$SOURCE" ]; then 
	if rsync -rltgoDv --delete --exclude="x.vdi" "$SOURCE" "$DESTINATIONARGENTE" > "$LOG" 2>&1; then 	
		echo "$TXTMAILOK" | msmtp "$ADRESSEMAIL"
	else
	echo "$TXTMAILPROBL" | msmtp "$ADRESSEMAIL"
        cat "$LOG" | msmtp "$ADRESSEMAIL"
	fi	
fi

Dernière modification par omnimax (Le 18/05/2014, à 14:15)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#18 Le 18/05/2014, à 17:25

Postmortem

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

Salut,
Peux tu nous copier coller le script complet et aussi copier-coller la façon dont tu lances le script et tous les résultats que ça renvoie (résultat s'affichant dans le terminal puis le fichier log)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#19 Le 18/05/2014, à 19:46

omnimax

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

bon mea culpa

Par contre, je confirme en mettant /usr/bin/bash cela ne fonctionne pas

#!/usr/bin/bash

if [[ -d $HOME/Images && -d $HOME/Documents ]]; then
echo ok
fi
exit 0
./essai
CHEMIN:  /home/omnimax/Bureau   DATE:  dim 18 mai  19:44:35       
-->  ./essai
zsh: ./essai: bad interpreter: /usr/bin/bash: aucun fichier ou dossier de ce type

par contre avec /bin/bash pas de soucis et la syntaxe fonctionne aussi

#!/bin/bash

if [[ -d $HOME/Images && -d $HOME/Documents ]]; then
echo ok
fi
exit 0
-->  ./essai
ok
CHEMIN:  /home/omnimax/Bureau   DATE:  dim 18 mai  19:46:04      

14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#20 Le 18/05/2014, à 21:06

Postmortem

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

C'est que /usr/bin/bash n'existe pas et du coup, ton script était exécuté par zsh au lieu de bash.

Dernière modification par Postmortem (Le 18/05/2014, à 21:06)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#21 Le 18/05/2014, à 21:11

tiramiseb

Re : rsync problème avec fichier Capture du 2013-03-08 17:41:09.png

Non, c'est moi qui me suis gouré en disant /usr/bin/bash, sans mon "conseil" il n'aurait pas mis ça smile
Donc oui /bin/bash est le bon chemin pour exécuter Bash smile

Hors ligne