On Sat, 14 Dec 2002 17:16:48 -0400
Christophe PEREZ <[EMAIL PROTECTED]> wrote:
> Le Sat, 14 Dec 2002 16:43:41 -0400, Christophe PEREZ a �crit :
>
> Et du coup, la modification propos�e du ${name##*/} en ${name#*/} ne
> fonctionne plus puisque �a ne supprime pas correctement le nom_de_chemin,
> puisque j'ai effectivement la m�me arborescence dans les 2 r�pertoires.
>
rien ne t'emp�che de faire commencer ton script par un cd $REP
tu le lances d'o� tu veux mais il d�marre dans $REP et du coup tes chemins deviennent
corrects.
si ton arborescence dans tes 2 r�pertoires � synchroniser est la m�me, cad sans
modification de la casse, et que seuls les noms de fichiers passent de minuscule en
majuscules, il faut prot�ger le chemin.
regarde comment fonctionne ceci:
OIFS=$IFS; IFS=$'\n\r\t'; for i in $(find -type f); do echo ${i%/*}/$(echo ${i##*/} |
tr a-z A-Z); done; IFS=$OIFS
$i = ./rep1/rep2/toto
${i##*/} supprime tous les carat�res depuis le d�but de $i jusqu'au dernier /
rencontr� -> toto
avec tr a-z A-z en pipe, �a devient TOTO
${i%/*} supprime tous les caract�res depuis la fin jusqu'au premier / rencontr� ->
./rep1/rep2
donc echo ${i%/*}/$(echo ${i##*/} | tr a-z A-Z) -> ./rep1/rep2/TOTO
ne pas oublier le / entre les 2 variables puisqu'il est supprim� dans les 2 variables.
je te laisse regarder ce que donnent ${i#*/} et ${i%%/*}.
maintenant admettons que tu ne fasse pas un cd au d�but du script mais que tu as
d�fini 2 variables pour les r�pertoires source et cible:
SYNCSRC=/home/toto/repA
SYNCCIB=/home/toto/repB
si tu tapes la ligne suivante:
OIFS=$IFS; IFS=$'\n\r\t'; for i in $(find $SYNCSRC -type f); do
a=${i/$SYNCSRC/$SYNCCIB}; echo ${a%/*}/$(echo ${i##*/} | tr a-z A-Z); done; IFS=$OIFS
si $i est /home/toto/repA/rep1/rep2/toto
le r�sultat sera /home/toto/repB/rep1/rep2/TOTO
~~~~~~~~~~~~~~~ ~~~~ <- j'ai soulign� :)
tu as trouv� le nom, chang� en majuscule, du fichier correspondant dans l'arborescence
du repertoire repB
ici ${i/$SYNCSRC/$SYNCCIB} permet de changer la premi�re occurence rencontr�e dans $i
de $SYNCSRC par $SYNCCIB
${var/a/b} change le premier a en b dans $var
${var//a/b} change tous les a en b dans $var
un petit appart� si tu permet ;)
je t'ai propos� une variable tableau dans le premier script de test. ces variables
peuvent se passer de bien des commandes grep sed ou autre awk en d�finissant des
champs qu'il suffit d'explorer. c'est tr�s rapide :)
par exemple je d�finis CNX comme �tant un tableau obtenu avec la commande
/sbin/ifconfig ppp0
CNX=($(/sbin/ifconfig ppp0)) <- remarque les () autour de la commande elle m�me dans
$()
echo ${CNX[0]} donne le premier champ -> ppp0
je peux explorer les divers champs en changeant le nombre entre []
mon adresse IP est dans le champ 5 (le sixi�me ! normal �a commence � 0)
echo ${CNX[5]} -> adr:183.25.163.15
je peux appliquer les substitutions suivantes pour avoir un r�sultat correct.
echo ${CNX[5]:4} -> 183.25.163.15 # je supprime les 4 1ers caract�res
echo ${CNX[5]/adr:/} -> 183.25.163.15 # je supprime adr: (je le remplace par rien !)
echo ${CNX[5]#*:} -> 183.25.163.15 # je supprime tout ce qui pr�c�de le : et lui avec.
pour connaitre son adresse IP � tout moment, il suffit donc de taper:
CNX=($(/sbin/ifconfig ppp0)); echo ${CNX[5]#*:}
on peut en faire un alias dans ~/.bashrc ou ailleurs:
alias ipad='CNX=($(/sbin/ifconfig ppp0)); echo ${CNX[5]#*:}'
il suffit alors de taper ipad pour connaitre son adresse IP
bon, je voudrais pas faire trop long juste pour un petit script que tu as du d�j�
faire fonctionner correctement ... :)
bye
jipe
Vous souhaitez acquerir votre Pack ou des Services MandrakeSoft?
Rendez-vous sur "http://www.mandrakestore.com"