On Fri, 29 Sep 2006 17:31:30 +0200
Christophe Gaubert <[EMAIL PROTECTED]> wrote:

> Le 29/09/06, jipe <[EMAIL PROTECTED]> a écrit :
> 
> > > find . -name '*.jpg' | while read file; do
> > >     if [ -e "${file:5}" ]; then
> > >       echo $file non renommé
> > >       else mv "$file" "${file:5}"
> > >     fi    
> > > done
> > >   
> > 
> > non, car alors le traitement ne se fera plus sur fichier.jpg mais sur
> > dir1/dir2/.../fichier.jpg
> 
> Argh. Quel âne je fais. 

moi j'ai rien dit!

> 
> > mais on peut rendre un script récursif assez facilement
> > tape ceci dans un terminal pour tester:
> > 
> > $ cmd() { pwd; }
> > $ rec() { for rep in *; do [ -d "$rep" ] && (cd "$rep"; cmd; rec);
> > done; } 
> > $ cmd; rec
> 
> Tiens, ça boucle sur ~/tmp. J'ai l'impression que c'est à cause d'un
> répertoire sur lequel je n'ai pas les bonnes permissions
> (~/tmp/orbit-root).
> 
> Sinon, l'idée est jolie, même si j'ai toujours lu qu'il valait mieux
> éviter la récursivité avec bash.

parce qu'on n'utilise pas assez la possibilité d'exécution des commande dans un 
sous-shell
invoqué avec ( ... ). par exemple je veux effectuer une commande dans tous les 
sous-répertoires
de rep1 de niveau 1.

cd rep1; for i in *; do cd "$i"; commande; cd..; done

dans ce cas, si jamais 'cd "$i"' renvoie une erreur, commande s'effectue sur le 
répertoire courant
et cd.. fait remonter l'arborescence, et ceci autant de fois qu'il y a de 
fichiers dans le répertoire
de départ. autant dire qu'on peut facilement remonter à / et que si on a 
exécuté le script en root ...

for i in *; do (cd "$i"; commande); done

ici après l'exécution du bloc de commandes entre (), on reste dans le 
répertoire courant. pas de risque
de remonter à /. on peut/doit améliorer en mettant un test sur "$i" et && entre 
cd et commande

for i in *; do [ -d "$i" ] && (cd "$i" && commande); done

> 
> Et pis, il suffit de jouer avec basename et dirname pour réparer mon
> bout de code :)
>  
> > > Puis tu l'exécutes :
> > > ./rename.sh  
> > 
> > pas obligatoire si tu exécutes ton script de la manière suivante:
> > sh rename.sh
> 
> Tu y vois un avantage ou bien c'est juste pour me reprendre ^_^ ?
> 

non, c'est juste un rappel de sécurité. on peut exécuter un fichier qui n'est 
pas exécutable

> > > 
> > > Bon, j'ai peut-être dit des trucs que tu savais déjà, mais bon, je
> > > me sentais l'âme pédagogique ce soir ^_^   
> > 
> > moi t'aussi :þ
> 
> <:o)
> 



bye
jipe
=========================================
Vous souhaitez acquerir votre Pack ou des Services Mandriva?
Rendez-vous sur "http://store.mandriva.com";.
Rejoignez le club mandrake : http://www.mandrivaclub.com
=========================================

Répondre à