#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
...
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...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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
#!/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 /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)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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 !
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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
EDIT : Et +1 aussi pour l'hypothèse de Postmortem
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...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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 &&...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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 ?
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
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
Donc oui /bin/bash est le bon chemin pour exécuter Bash
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne