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
=========================================