OVH Cloud OVH Cloud

script bash pour modifier des noms de fichiers

27 réponses
Avatar
Hubert
Bonjour,

J'aimerais renommer les fichiers images transférés d'un appareil
photonumérique dans un répertoire à l'aide d'un script bash.

par exemple : dscf4125.jpg -> 4125paysage.jpg

- éliminer les 4 premières lettres (dscf)
- conserver le n° de quatres chiffres
- ajouter un nom descriptif au fichier (paysage)
- conserver le suffix (.jpg)

Comme vous pouvez vous en douter mes connaissances en programmation sont
(trés) faibles...
Si quelqu'un avait la bonté (et le temps) d'écrire ce script avec moult
commentaires "pas à pas" pour mon éducation.

Avec mes remerciements

Hubert

7 réponses

1 2 3
Avatar
Vincent Lefevre
Dans l'article ,
Laurent Wacrenier <lwa@ teaser . fr> écrit:

Il ne me semble pas que la norme impose de renvoyer une erreur
lorsqu'une fonctionalité non normalisée est appelée.


Il y a des choses qui fonctionnent en sh (de Solaris et d'OSF si je
me souviens bien) et qui ne fonctionnent plus en bash, car ça devient
des mots qui ont une signification spéciale (e.g. "term" pour le
signal, alors que sh ne reconnaît que la forme "TERM" en majuscules).

--
Vincent Lefèvre - Web: <http://www.vinc17.org/> - 100%
validated (X)HTML - Acorn Risc PC, Yellow Pig 17, Championnat International
des Jeux Mathématiques et Logiques, TETRHEX, etc.
Work: CR INRIA - computer arithmetic / SPACES project at LORIA

Avatar
Vincent Lefevre
Dans l'article ,
Stephane Chazelas écrit:

Ce qui est important, c'est d'écrire des *script* sh (POSIX),
pas d'utiliser tel ou tel *shell* POSIX. Un script POSIX sera
interprêté correctement par tous les shells POSIX (ksh,
emulations sh de bash et zsh, dash, les shells des *BSD...)


zsh n'est pas tout à fait POSIX, car unset d'une variable inexistante
renvoie une erreur. Idem pour d'anciennes versions de bash (mais qu'on
trouve encore installées sur certaines machines).

--
Vincent Lefèvre - Web: <http://www.vinc17.org/> - 100%
validated (X)HTML - Acorn Risc PC, Yellow Pig 17, Championnat International
des Jeux Mathématiques et Logiques, TETRHEX, etc.
Work: CR INRIA - computer arithmetic / SPACES project at LORIA

Avatar
Stephane Chazelas
2003-11-26, 23:02(+00), Vincent Lefevre:
[...]
zsh n'est pas tout à fait POSIX, car unset d'une variable inexistante
renvoie une erreur. Idem pour d'anciennes versions de bash (mais qu'on
trouve encore installées sur certaines machines).


De cet acabit-là, il y en a plein que ce soit chez bash, ksh,
zsh ou dash. Il y en a chez zsh qui sont plus ennuyeuses que ça
(je me souviens de quand t'avais signalé le problème, je ne
trouve pas POSIX très clair là-dessus), par exemple le
${1+"$@"} qui fait du word splitting.

Mais il y a pas mal de points /à la con/ où zsh est plus
POSIX-compliant que bash (par exemple l'expansion de "$*").

Bref, il n'y a pas de shell « tout-à-fait POSIX » tout comme il
n'y a pas de programme totalement exempt de bug. Et la norme
POSIX est loin d'être parfaite, il y a un formulaire pour
signaler les problèmes et il y en a.

Cela dit, bash avait pour but premier d'être compatible, zsh
non. Je constate que ça a handicapé bash au point qu'il est
presque encore moins utilisable que ksh (!) et que zsh ne s'en
sort pas si mal côté compatibilité (ils ont eu le bon sens, dès
le départ de se détacher de POSIX [qui est un non-sens] et de
fournir un mode de compatibilité, bash s'en est rendu compte
trop tard et a fait les mauvais choix au départ).

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]

Avatar
Stephane Chazelas
2003-11-26, 22:57(+00), Vincent Lefevre:
Dans l'article ,
Laurent Wacrenier <lwa@ teaser . fr> écrit:

Il ne me semble pas que la norme impose de renvoyer une erreur
lorsqu'une fonctionalité non normalisée est appelée.


Il y a des choses qui fonctionnent en sh (de Solaris et d'OSF si je
me souviens bien) et qui ne fonctionnent plus en bash, car ça devient
des mots qui ont une signification spéciale (e.g. "term" pour le
signal, alors que sh ne reconnaît que la forme "TERM" en majuscules).


Je pense que tu parles de Bourne shell en l'occurrence (/bin/sh
sous Solaris [qui n'est pas le "sh" standard, ce en quoi Solaris
n'est vraiment pas clair] n'est pas un shell POSIX mais un shell
Bourne) et en effet, le shell Bourne n'est pas POSIX conformant
ET un script écrit pour un shell Bourne ne fonctionnera pas
_forcément_ correctement s'il est interprêté par un shell POSIX.

Cela dit, le /usr/xpg4/bin/sh de Solaris est POSIX conformant,
mais ça ne veut pas dire qu'un script qui marche pour ce shell
marchera sous un autre shell lui aussi POSIX conformant vu que
le /usr/xpg4/bin/sh de Solaris a lui aussi des extensions et
qu'il y a des comportements /unspecified/ ou /undefined/ dans la
spécification POSIX. Donc, je répète, ce qui est important c'est
d'écrire un *script* POSIX conformant, pas de s'assurer qu'il
marche avec *une* implementation de sh POSIX conformant, si on
veut être portable.

Je sens qu'on va avoir besoin d'un cours d'algèbre booléenne
bientôt...

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]


Avatar
Vincent Lefevre
Dans l'article ,
Stephane Chazelas écrit:

Je pense que tu parles de Bourne shell en l'occurrence (/bin/sh
sous Solaris [qui n'est pas le "sh" standard, ce en quoi Solaris
n'est vraiment pas clair] n'est pas un shell POSIX mais un shell
Bourne) et en effet, le shell Bourne n'est pas POSIX conformant
ET un script écrit pour un shell Bourne ne fonctionnera pas
_forcément_ correctement s'il est interprêté par un shell POSIX.


Oui, mais le problème est que quand on écrit un script "sh", on
commence toujours par

#!/bin/sh

Solaris aurait dû mettre le shell standard en standard...

L'autre problème est d'avoir un mécanisme de validation (ou tout du
moins un truc genre lint qui détecte les problèmes éventuels).

--
Vincent Lefèvre - Web: <http://www.vinc17.org/> - 100%
validated (X)HTML - Acorn Risc PC, Yellow Pig 17, Championnat International
des Jeux Mathématiques et Logiques, TETRHEX, etc.
Work: CR INRIA - computer arithmetic / SPACES project at LORIA

Avatar
Erwan David
Vincent Lefevre <vincent+ écrivait :

Oui, mais le problème est que quand on écrit un script "sh", on
commence toujours par

#!/bin/sh

Solaris aurait dû mettre le shell standard en standard...


Y'avait Ultrix aussi où le shell posix s'appelait sh5

Avatar
Stephane Chazelas
2003-11-27, 10:09(+00), Vincent Lefevre:
[...]
Oui, mais le problème est que quand on écrit un script "sh", on
commence toujours par

#!/bin/sh

Solaris aurait dû mettre le shell standard en standard...
[...]


On est bien d'accord.

POSIX aurait du à mon avis imposer que le sh standard soit dans
/bin/sh

Il y a eu une discussion à ce sujet ici, il n'y a pas si
longtemps.

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]

1 2 3