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 19/06/2011, à 22:57

chiron

Récupérer un chemin dans une variable?

Bonjour,

Dans un script bash j'ai une commande:

find / -maxdepth 3 -name essai2

qui me renvoie:

/volume1/video/essai2

Comment faire pour récupérer le chemin /volume1/video/ dans une variable pour le réutiliser plus tard?

J'ai essayé de me plonger dans le man de sed, mais euhh... roll

Merci à celui qui pourra me filer un petit coup de main... :-)


In hoc signo vinces.

Hors ligne

#2 Le 19/06/2011, à 23:36

Bousky

Re : Récupérer un chemin dans une variable?

sed n'a rien a voir avec les variables de bash, regarde plutôt dans le man de bash. Il y a deux solutions :
- la plus portable (fonctionne aussi avec sh), « ` » est situé sur la touche 7 :
variable=`commande`
- celle conseillée dans bash :
variable=$(commande)

EDIT : Désolé, j'avais mal lu roll cf. plus bas…

Par contre find peut renvoyé plusieurs valeurs séparées par des sauts de lignes, se qui peut gêner le reste du script. Mieux vaut ne garder que la première ligne :

find / -maxdepth 3 -name essai2 | head -n1

Dernière modification par Bousky (Le 19/06/2011, à 23:52)


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#3 Le 19/06/2011, à 23:43

wido

Re : Récupérer un chemin dans une variable?

Bonjour,
c'est un peu tiré par les cheveux:

echo "/volume1/video/essai2" | awk -F/ '{print "/" $2 "/" $3 "/"}'

Hors ligne

#4 Le 19/06/2011, à 23:50

Bousky

Re : Récupérer un chemin dans une variable?

En pur bash :

chemin=`find / -maxdepth 3 -name essai2 | head -n1`
chemin=${chemin%/*}

En utilisant l'utilitaire qui va bien :

chemin=$(dirname $(find / -maxdepth 3 -name essai2 | head -n1))

Dernière modification par Bousky (Le 20/06/2011, à 00:08)


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#5 Le 20/06/2011, à 00:15

AnsuzPeorth

Re : Récupérer un chemin dans une variable?

Euh, man find, des fois c'est utile roll

find / -maxdepth 3 -name essai2 -printf '%h\n'

Dernière modification par AnsuzPeorth (Le 20/06/2011, à 00:15)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#6 Le 22/06/2011, à 10:50

chiron

Re : Récupérer un chemin dans une variable?

Un grand merci à tous.
Je vous livre le fin fond de ma pensée. Je possède un synology DS110J, qui à priori ne gère pas l'uuid. Embêtant pour faire des sauvegardes automatisées (le point de montage pourrait changer si par exemple je débranche/rebranche en faisant du ménage).
J'ai fini mon morceau de bravoure. C'est la première fois que je me lance dans un script de cette ampleur.
J'ai utilisé une astuce, en testant la présence d'un fichier au nom unique sur les différents disques.
Je teste ensuite la présence de la source et de la sauvegarde (ainsi je ne risque pas d'écraser par mégarde ma sauvegarde), le retour du rsync, et un mail m'est envoyé systématiquement.
Les tests sont concluants, ça marche, y compris dans la crontab.
A votre avis, j'ai oublié quelque chose, il y a une faille?

#!/bin/ash
#
#
# Récupération des chemins des différents disques sources et de sauvegarde
# Cette moulinette teste la présence d'un fichier au nom unique sur chaque support et met le chemin dans une variable ad hoc
#
TestRsyncProgrammesSource=$(dirname $(find / -maxdepth 3 -name TestRsyncProgrammesSource | head -n1))           #Source des programmes
TestRsyncProgrammesDestination=$(dirname $(find / -maxdepth 3 -name TestRsyncProgrammesDestination | head -n1)) #Destination des programmes
TestRsyncVideoSource=/volume1/video                                                                             #Source des videos le chemin est toujours /volume1/video
TestRsyncVideoDestination=$(dirname $(find / -maxdepth 3 -name TestRsyncVideoDestination | head -n1))           #Destination des videos
TestRsyncVideo2Source=$(dirname $(find / -maxdepth 3 -name TestRsyncVideo2Source | head -n1))                   #Source des videos2
TestRsyncVideo2Destination=$(dirname $(find / -maxdepth 3 -name TestRsyncVideo2Destination | head -n1))         #Destination des videos2
#
#
# backup des programmes
#
rm -f /root/rapport-rsync.txt
#
#la source et la destination doivent exister sinon pas de sauvegarde
if [ -f $TestRsyncProgrammesSource"/"TestRsyncProgrammesSource ] &&  [ -f $TestRsyncProgrammesDestination"/"TestRsyncProgrammesDestination ] ; then
echo "programmes: test source et destination ok"
/usr/syno/bin/rsync -rltgoDv --del --ignore-errors --progress --stats --force --exclude "TestRsyncProgrammesSource" --exclude "TestRsyncProgrammesDestination" $TestRsyncProgrammesSource"/" $TestRsyncProgrammesDestination"/" >/root/rapport-rsync.txt
        if [ $? == 0 ] ; then
        echo "retour rsync $?"
        /opt/bin/nail -s "OK Backup programmes de $TestRsyncProgrammesSource vers $TestRsyncProgrammesDestination" mymail@free.fr < /root/rapport-rsync.txt
        else
        /opt/bin/nail -s "NOK Backup programmes de $TestRsyncProgrammesSource vers $TestRsyncProgrammesDestination" mymail@free.fr < /root/rapport-rsync.txt
        fi
else
echo " "
fi
if [ -f $TestRsyncProgrammesSource"/"TestRsyncProgrammesSource ] ; then
echo " "
else
echo "TestRsyncProgrammesSource nok"
/opt/bin/nail -s "ERREUR! sur TestRsyncProgrammesSource" mymail@free.fr < /root/erreur-USB
fi
if [ -f $TestRsyncProgrammesDestination"/"TestRsyncProgrammesDestination ]; then
echo " "
else
echo "TestRsyncProgrammesDestination nok"
/opt/bin/nail -s "ERREUR! sur $TestRsyncProgrammesDestination" mymail@free.fr < /root/erreur-USB
fi
#
# backup des vidéos
#
rm -f /root/rapport-rsync.txt
if [ -f $TestRsyncVideoSource"/"TestRsyncVideoSource ] &&  [ -f $TestRsyncVideoDestination"/"TestRsyncVideoDestination ] ; then
echo "videos: test source et destination ok"
/usr/syno/bin/rsync -rltgoDv --del --ignore-errors --progress --stats --force --exclude "05-Séries" --exclude "TestRsyncVideoSource" --exclude "TestRsyncVideoDestination" $TestRsyncVideoSource"/" $TestRsyncVideoDestination"/" >/root/rapport-rsync.txt
        if [ $? == 0 ] ; then
        echo "retour rsync $?"
        /opt/bin/nail -s "OK Backup videos de $TestRsyncVideoSource vers $TestRsyncVideoDestination" mymail@free.fr < /root/rapport-rsync.txt
        else
        /opt/bin/nail -s "NOK Backup videos de $TestRsyncVideoSource vers $TestRsyncVideoDestination" mymail@free.fr < /root/rapport-rsync.txt
        fi
else
echo " "
fi
if [ -f $TestRsyncVideoSource"/"TestRsyncVideoSource ] ; then
echo " "
else
echo "TestRsyncVideoSource nok"
/opt/bin/nail -s "ERREUR! sur TestRsyncVideoSource" mymail@free.fr < /root/erreur-USB
fi
if [ -f $TestRsyncVideoDestination"/"TestRsyncVideoDestination ]; then
echo " "
else
echo "TestRsyncVideoDestination nok"
/opt/bin/nail -s "ERREUR! sur $TestRsyncVideoDestination" mymail@free.fr < /root/erreur-USB
fi
#
# backup des vidéos2
#
rm -f /root/rapport-rsync.txt
if [ -f $TestRsyncVideo2Source"/"TestRsyncVideo2Source ] &&  [ -f $TestRsyncVideo2Destination"/"TestRsyncVideo2Destination ] ; then
echo "videos2: test source et destination ok"
/usr/syno/bin/rsync -rltgoDv --del --ignore-errors --progress --stats --force --exclude "TestRsyncVideo2Source" --exclude "TestRsyncVideo2Destination" $TestRsyncVideo2Source"/" $TestRsyncVideo2Destination"/" >/root/rapport-rsync.txt
        if [ $? == 0 ] ; then
        echo "retour rsync $?"
        /opt/bin/nail -s "OK Backup videos2 de $TestRsyncVideo2Source vers $TestRsyncVideo2Destination" mymail@free.fr < /root/rapport-rsync.txt
        else
        /opt/bin/nail -s "NOK Backup videos2 de $TestRsyncVideo2Source vers $TestRsyncVideo2Destination" mymail@free.fr < /root/rapport-rsync.txt
        fi
else
echo " "
fi
if [ -f $TestRsyncVideo2Source"/"TestRsyncVideo2Source ] ; then
echo " "
else
echo "TestRsyncVideo2Source nok"
/opt/bin/nail -s "ERREUR! sur TestRsyncVideo2Source" mymail@free.fr < /root/erreur-USB
fi
if [ -f $TestRsyncVideo2Destination"/"TestRsyncVideo2Destination ]; then
echo " "
else
echo "TestRsyncVideo2Destination nok"
/opt/bin/nail -s "ERREUR! sur $TestRsyncVideo2Destination" mymail@free.fr < /root/erreur-USB
fi

In hoc signo vinces.

Hors ligne

#7 Le 22/06/2011, à 14:54

twocats

Re : Récupérer un chemin dans une variable?

#!/bin/ash

Je ne connais pas ?


La réponse est 42

Hors ligne

#8 Le 22/06/2011, à 14:56

FRUiT

Re : Récupérer un chemin dans une variable?


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne