Dites donc Messieurs, chercheriez vous à m'embrouiller l'esprit ou
quoi ?
Dans tous les cas c'est réussi. 
Je veux créer un fichier rename.sh que je lancerais dans le ou les
répertoires.
Je préfère le lancer dans 5 ou 6 répertoire plutôt que d'avoir à
modifier 250 noms de fichiers.

Restons simple SVP, surtout pour moi.

Merci tout de même. C'est très intéressant mais j'avoue que dans vos
commentaires, je m'y perd.


 Le vendredi 29 septembre 2006 à 20:17 +0200, jipe a écrit :
> 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
> pièce jointe document plein texte (message-footer.txt)
> =========================================
> Vous souhaitez acquerir votre Pack ou des Services Mandriva?
> Rendez-vous sur "http://store.mandriva.com";.
> Rejoignez le club mandrake : http://www.mandrivaclub.com
> =========================================

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