Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Modif auto du répertoire des images

19 réponses
Avatar
corbie
Bonjour =E0 tous,

Je cherche la solution automatis=E9e pour r=E9aliser
la modification du r=E9pertoire des images dans des=20
centaines de fichiers .html ou .php :

<img src=3D"toto.jpg"> =3D> <img src=3D"jpg/toto.jpg">
<img src=3D"images/toto.jpg"> =3D> <img src=3D"jpg/toto.jpg">
<img src=3D"logos/toto.jpg"> =3D> <img src=3D"jpg/toto.jpg">

C'est =E0 dire, mettre tous les fichiers images .JPG dans le r=E9pertoire "=
/jpg".

et idem avec les images ".png" , ".gif" etc ...

Vous comprendrez que le faire =E0 la main serait trop fastidieux ... :-)

Merci d'une aide sur l'=E9criture d'un fichier ex=E9cutable en "bash"
avec je pense la commande "sed ..."

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/201107231228.14247.corbie@free.fr

9 réponses

1 2
Avatar
Sylvain L. Sauvage
[1. Ce serait bien de répondre dessous.
2. Ce serait bien de couper les citations inutiles (surtout si
c’est pour répondre dessus).
3. Ça aurait été bien de mettre HS dans le titre.]

Le samedi 23 juillet 2011 à 14:07:54, Yohann POILVERT a écrit :
Oula! oui d'accord...
Bon...

Avec ceci?

sed 's/<img
src="images/([a-z][a-z]*).([a-z][a-z]*)">/<img
src="2/1.2">/g'



Dans le désordre :
— pas la peine de protéger «"» (au contraire) ;
— il faut protéger le «.» ;
— simplification : xx* → x+ ;
— utiliser autre chose que / comme séparateur permet d†™Ã©viter
d’avoir à les protéger dans les expressions ;
— utiliser l’option -r permet d’éviter d†™autres protections
(parenthèses, + et ?) ;
— un nom de fichier peut comporter des chiffres, des soulignés,
des points, et tout un tas d’autres caractères, pas seulement
[a-z] (manquaient aussi les majuscules).

Et donc, pour répondre à la question initiale (avec les images
de départ dans n’importe quel répertoire) :

sed -re 's:src="([^"]*/)?([^"/]+).([^"/.]+)":src="3/2.3":g'

Notes :
— j’ai limité l’expression à src="⠀¦", il devrait y avoir
d’autres attributs dans une balise img (au minimum width,
height et alt) et src n’est pas forcément le premier. Par
contre, il vaut mieux ne pas avoir src="…" ailleurs dans le
texte…
— «"» ne peut pas être dans un nom de fichier (mais ce serait
déjà difficile dans du HTML) ;
— si src peut être en majuscules, ajouter i au bout (→ …:gi) ;
— si c’est parfois «'» et non «"» qui e st utilisé pour entourer
les attributs, le plus simple est de faire une seconde passe.

--
Sylvain Sauvage

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
corbie
Yohann POILVERT a écrit :
Avec ceci?
sed 's/<img src="images/([a-z][a-z]*).([a-z][a-z]*)">/<img src ="2/1.2">/g'



ça fonctionne (merci).

Le samedi 23 juillet 2011, Sylvain L. Sauvage a écrit :
[1. Ce serait bien de répondre dessous.
2. Ce serait bien de couper les citations inutiles (surtout si
c’est pour répondre dessus).
3. Ça aurait été bien de mettre HS dans le titre.] :



Désolé de l'oubli du "[HS]"

Et donc, pour répondre à la question initiale (avec les image s
de départ dans n’importe quel répertoire) :

sed -re 's:src="([^"]*/)?([^"/]+).([^"/.]+)":src="3/2.3":g'

Notes :
— j’ai limité l’expression à src="⠀¦", il devrait y avoir
d’autres attributs dans une balise img (au minimum width,
height et alt) et src n’est pas forcément le premier. Par
contre, il vaut mieux ne pas avoir src="…" ailleurs dans le
texte…
— «"» ne peut pas être dans un nom de fichier (mai s ce serait
déjà difficile dans du HTML) ;
— si src peut être en majuscules, ajouter i au bout (↠’ …:gi) ;
— si c’est parfois «'» et non «"» qui est utilisé pour entourer
les attributs, le plus simple est de faire une seconde passe.
Sylvain Sauvage



Impeccable mais je ne comprends ce qu'il faut modifier dans
la syntaxe, dans ces cas :

<img src='toto.jpg'> ET <img src=toto.jpg>

Merci.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
fred
Le 23/07/2011 12:28, a écrit :
Bonjour à tous,

Je cherche la solution automatisée pour réaliser
la modification du répertoire des images dans des
centaines de fichiers .html ou .php :

<img src="toto.jpg"> => <img src="jpg/toto.jpg">
<img src="images/toto.jpg"> => <img src="jpg/toto.jpg">
<img src="logos/toto.jpg"> => <img src="jpg/toto.jpg">

C'est à dire, mettre tous les fichiers images .JPG dans le répertoire "/jpg".

et idem avec les images ".png" , ".gif" etc ...

Vous comprendrez que le faire à la main serait trop fastidieux ... :-)

Merci d'une aide sur l'écriture d'un fichier exécutable en "bash"
avec je pense la commande "sed ..."




si tu veux laisser la console de coté, sous Debian tu peux :
0. lancer Nautilus
1. créer ton répertoire ou tu le veux
2. lancer une recherche de tous les jpg dans un répertoire
3. sélectionner tous les fichiers trouvés avec Ctrl+a
4. avec le 3e bouton de la souris (clic la molette) les glisser dans le
répertoire créé que tu aura affiché dans le panneau de gauche (F9) ou le
panneau supplémentaire (F3)
5. en relachant le 3e bouton il t'es proposé de copier ou déplcer ou...
6.c'est fait

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
corbie
Le samedi 23 juillet 2011, fred a écrit :
Le 23/07/2011 12:28, a écrit :
> Je cherche la solution automatisée pour réaliser
> la modification du répertoire des images dans des
> centaines de fichiers .html ou .php :

> <img src="toto.jpg"> => <img src="jpg/toto.jpg">
> <img src="images/toto.jpg"> => <img src="jpg/toto.jpg">
> <img src="logos/toto.jpg"> => <img src="jpg/toto.jpg">
>
> C'est à dire, mettre tous les fichiers images .JPG dans le répertoi re "/jpg".
>
> et idem avec les images ".png" , ".gif" etc ...
>
> Vous comprendrez que le faire à la main serait trop fastidieux ... :-)
>
> Merci d'une aide sur l'écriture d'un fichier exécutable en "bash"
> avec je pense la commande "sed ..."


------------
si tu veux laisser la console de coté, sous Debian tu peux :
0. lancer Nautilus
1. créer ton répertoire ou tu le veux
2. lancer une recherche de tous les jpg dans un répertoire
3. sélectionner tous les fichiers trouvés avec Ctrl+a
4. avec le 3e bouton de la souris (clic la molette) les glisser dans le
répertoire créé que tu aura affiché dans le panneau de gauche (F9 ) ou le
panneau supplémentaire (F3)
5. en relachant le 3e bouton il t'es proposé de copier ou déplcer ou. ..
6.c'est fait


----------------
Créer répertoire "jpg" et déplacer "img.jpg" => jpg :
ça c'est facile, même en mode console,
merci quand même :-)

Mon problème à automatiser est là :
> avec je pense la commande "sed ..."


<img src="toto.jpg"> => <img src="jpg/toto.jpg">
<img src="rep/toto.jpg"> => <img src="jpg/toto.jpg">
<img src="../rep/toto.jpg"> => <img src="../jpg/toto.jpg">

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
fred
Créer répertoire "jpg" et déplacer "img.jpg" => jpg :
ça c'est facile, même en mode console,
merci quand même :-)

Mon problème à automatiser est là :

avec je pense la commande "sed ..."





<img src="toto.jpg"> => <img src="jpg/toto.jpg">
<img src="rep/toto.jpg"> => <img src="jpg/toto.jpg">
<img src="../rep/toto.jpg"> => <img src="../jpg/toto.jpg">




désolé, je croisp as comprendre ton pb, bonne fin de semaine !

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Sylvain L. Sauvage
Le samedi 23 juillet 2011 à 15:47:14, a écrit :
[…]
> sed -re
> 's:src="([^"]*/)?([^"/]+).([^"/.]+)":src="3/2.3":g'
>
>[…]
> — si c’est parfois «'» et non «"» q ui est utilisé pour
> entourer les attributs, le plus simple est de faire une
> seconde passe.

Impeccable mais je ne comprends ce qu'il faut modifier dans
la syntaxe, dans ces cas :

<img src='toto.jpg'>



Remplacer les «"» par des «'» (le est là pour le shell, pas
pour sed) :

sed -re 's:src='([^']*/)?([^'/]+).([^'/.]+)':src="3/2.
3":g'

ET <img src=toto.jpg>



D’abord, sache que c’est très crado comme façon de faire.
Ensuite, s’il n’y a pas de guillemets, c’est que l’espace
n’est pas un caractère de nom de fichier, donc le nom de fichi er
se termine par «>» ou « ». Donc on remplace «" » par «> » et on
remet le même à la fin (le 4) :

sed -re 's:src=([^> ]*/)?([^> /]+).([^> /.]+)([> ]):src="3/2.
3"4:g'

Le reste dans `info sed`.

--
Sylvain Sauvage

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Yves Rutschle
On Sat, Jul 23, 2011 at 03:10:32PM +0200, Sylvain L. Sauvage wrote:
sed -re 's:src="([^"]*/)?([^"/]+).([^"/.]+)":src="3/2.3":g'

Notes :


[...]
-- si src peut être en majuscules, ajouter i au bout (-> ...:gi) ;
-- si c'est parfois «'» et non «"» qui est utilisé pour entourer
les attributs, le plus simple est de faire une seconde passe.



- Et il peut y avoir des espaces un peu n'importe où
- Et il peut y avoir des retours à la ligne entre le src et
le nom de fichier
- .... et c'est en général une mauvaise idée de parser du
HTML avec des expressions régulières:
http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html

Pour faire quelque chose qui marchera correctement, il est
nettement plus simple d'utiliser Perl et HTML::TreeBuilder.

Bon, après, on sait jamais, l'expression régulière peu
marcher dans ton cas particulier...

Y.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
corbie
Le dimanche 24 juillet 2011, Sylvain L. Sauvage a écrit :
Le samedi 23 juillet 2011 à 15:47:14, a écrit :
> <img src='toto.jpg'>
Remplacer les «"» par des «'» (le est là po ur le shell, pas pour sed) :

sed -re 's:src='([^']*/)?([^'/]+).([^'/.]+)':src="3/2.3":g'


=>
sed -re 's:src='([^']*/)?([^'/]+).([^'/.]+)':src="3/2.3":g' es sai.html
bash: syntax error near unexpected token `('

> ET <img src=toto.jpg>
D’abord, sache que c’est très crado comme faç on de faire.
Ensuite, s’il n’y a pas de guillemets, c’est qu e l’espace
n’est pas un caractère de nom de fichier, donc le nom de fic hier
se termine par «>» ou « ». Donc on remplace «" » par «> » et on
remet le même à la fin (le 4) :
Sylvain Sauvage
sed -re 's:src=([^> ]*/)?([^> /]+).([^> /.]+)([> ]):src="3/2.3"4 :g'


=> idem :
bash: syntax error near unexpected token `('

J'ai tenté des modifs, sans succès ...

Merci.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Sylvain L. Sauvage
Le lundi 25 juillet 2011 à 12:19:37, a écrit :
[…]
> Remplacer les «"» par des «'» (le est là pour le shell,
> pas pour sed) :
> sed -re
> 's:src='([^']*/)?([^'/]+).([^'/.]+)':src="3/2.3":
> g'

=>
sed -re
's:src='([^']*/)?([^'/]+).([^'/.]+)':src="3/2.3":g'
essai.html bash: syntax error near unexpected token `('



Oui, ma faute, le shell ne comprend pas «'» (ou plutôt,  «'» ne
permet pas «»). Donc :

sed -re
"s:src='([^']*/)?([^'/]+).([^'/.]+)':src="3/2.3":g"

(qui est finalement plus court…)

[…]
> sed -re 's:src=([^> ]*/)?([^> /]+).([^> /.]+)([>
> ]):src="3/2.3"4:g'

=> idem :
bash: syntax error near unexpected token `('



Là non, je ne vois pas. Mon expression est correcte. Je répè te
(attention à mauvais copier-coller) :

sed -re
's:src=([^> ]*/)?([^> /]+).([^> /.]+)([> ]):src="3/2.3"4:g'

J'ai tenté des modifs, sans succès ...



Si tu lis `info sed`, tu dois pouvoir comprendre les
expressions et les modifier.
Si tu as des problèmes avec Bash, essaie `man bash`.
En tout cas, les deux expressions données ici fonctionnent…

--
Sylvain Sauvage

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
1 2