# Script pour créer un fichier .html pour tous les fichiers dans un dossier

**URL:** <https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114>\
**Category:** Programmation\
**Created:** [Mars 30, 2017, 2:40 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114 "2017-03-30T14:40:46Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Esprit](https://www.debian-fr.org/user_avatar/www.debian-fr.org/esprit/32/5917_2.png) [@Esprit](https://www.debian-fr.org/u/Esprit)\
**Post date:** [Mars 30, 2017, 2:40 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/1 "2017-03-30T14:40:46Z")

</div>

Bonjour à tous,

J’ai une galerie propulsée par [minigalnano](http://sebsauvage.net/wiki/doku.php?id=minigal_nano) et dont je suis très satisfait.

Je voudrais faire des commentaires pour les images. Pour cela, il faut rajouter un fichier .html pour chaque image. Voici comment se présente le dossier et les sous-dossiers :

```
.
├── dossier1
│ ├── comment.html
│ ├── DSC02624.JPG
│ └── ...
├── dossier2
│ ├── comment.html
│ ├── DSC02627.JPG
│ └── ...
└── comment.html

```

Je voudrais pouvoir créer automatiquement les fichier DSC02624.JPG.html, DSC02627.JPG.html, etc. Je vois mal comment faire par contre… Une idée ? 🙂

Merci d’avance

---

<div class="post-metadata">

**Author:** ![seb-ksl](https://www.debian-fr.org/user_avatar/www.debian-fr.org/seb-ksl/32/2946_2.png) [@seb-ksl](https://www.debian-fr.org/u/seb-ksl)\
**Post date:** [Mars 30, 2017, 5:55 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/2 "2017-03-30T17:55:22Z")

</div>

Salut,

C’est pas les solutions qui manquent. Tu sais coder en quoi ?

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Mars 30, 2017, 5:58 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/3 "2017-03-30T17:58:59Z")

</div>

salut,

en bash, jouer avec `shopt globstar`

---

<div class="post-metadata">

**Author:** ![dindoun](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dindoun/32/4281_2.png) [@dindoun](https://www.debian-fr.org/u/dindoun)\
**Post date:** [Mars 31, 2017, 1:14 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/4 "2017-03-31T13:14:01Z")

</div>

salut  
en bash :

`IFS=$'\n'; for i in $(find . -type f |grep JPG$ );do echo $i ; touch $i.html ;done`

pas tester mais ca devrait marcher  
le IFS= permet de travailler meme si il y a des espaces

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Mars 31, 2017, 1:29 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/5 "2017-03-31T13:29:02Z")

</div>

non, non.  
il est préférable de ne pas modifier l’`IFS`, et de ne pas utiliser de substitution de commande dans une boucle `for`.  
notez que `find` possède une “commande” pour traiter les _regex_ si nécessaire, mais ici, ça ne l’est pas.  
donc :  
`find . -type f -iname "*.jpg" -exec <cmd> {} \;`  
et s’il y a plus d’une commande à exécuter :  
`find . -type f -iname "*.jpg" -exec sh -c '<cmds> "$1"' sh {} \;`  
on pourrait même y exécuter une boucle `for` :  
`find . -type f -iname "*.jpg" -exec sh -c 'for i do <cmds>; done' sh {} +`

mais bon, je reste sur `bash` :

````auto
for f in ./**/*.jpg; do <cmds>; done```
````

---

<div class="post-metadata">

**Author:** ![dindoun](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dindoun/32/4281_2.png) [@dindoun](https://www.debian-fr.org/u/dindoun)\
**Post date:** [Mars 31, 2017, 4:06 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/6 "2017-03-31T16:06:13Z")

</div>

peux-tu préciser pourquoi "il vaut mieux pas"  
j’utilise ce type de scripts depuis des annees sans pb  
l’avantage est une plus grand lisibilité pour moi

par ailleurs le -iname me parait faux ici, car il travaille sur des images “calibrées” en .JPG pas .jpg et ca m’a déjà éviter des pbs.

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Mars 31, 2017, 4:21 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/7 "2017-03-31T16:21:41Z")

</div>

ah, mais tu peux bêcher avec une pioche si ça te plaît, et depuis des années si tu n’y vois pas de d’inconvénient.  
et un jour, tu te rends compte qu’il existe de bonnes pratiques (“best practices”) !  
alors, “tu t’adaptes, ou tu péris” (HG Wells, L’Esprit au bout du rouleau, 1945).

pour répondre clairement à ta question : on peut mettre des alinéas dans le nom d’un fichier.

et, effectivement `-iname` est un excès de zèle, pareil pour le `nocaseglob`.  
à [Esprit](https://www.debian-fr.org/users/Esprit) de le confirmer…

---

<div class="post-metadata">

**Author:** ![dindoun](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dindoun/32/4281_2.png) [@dindoun](https://www.debian-fr.org/u/dindoun)\
**Post date:** [Mars 31, 2017, 4:25 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/8 "2017-03-31T16:25:17Z")

</div>

Je veux juste apprendre  
c’est quoi un alinéa dans ce contexte?

---

<div class="post-metadata">

**Author:** ![dindoun](https://www.debian-fr.org/user_avatar/www.debian-fr.org/dindoun/32/4281_2.png) [@dindoun](https://www.debian-fr.org/u/dindoun)\
**Post date:** [Mars 31, 2017, 4:26 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/9 "2017-03-31T16:26:18Z")

</div>

et je suis intéressé par ton shopt juste pas encore regardé

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Mars 31, 2017, 5:55 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/10 "2017-03-31T17:55:00Z")

</div>

```auto
touch 'mon
fi
chier'
IFS=$'\n'
for f in $(find -type f); do echo ">$f<"; done
>./mon<
>fi<
>chier<
for f in *; do echo ">$f<"; done
>mon
fi
chier<

```

---

<div class="post-metadata">

**Author:** ![Esprit](https://www.debian-fr.org/user_avatar/www.debian-fr.org/esprit/32/5917_2.png) [@Esprit](https://www.debian-fr.org/u/Esprit)\
**Post date:** [Avril 1, 2017, 1:08 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/11 "2017-04-01T13:08:39Z")

</div>

Merci pour vos réponses. Je teste tout ça et je reviens vers vous avec la solution qui me convient le mieux. 🙂

J’ai touché un tout petit peu au C, au Python et aux scripts shell mais je ne pratique tellement pas assez qu’à chaque fois, j’oublie un peu tout. J’ai jamais dépassé le niveau débutant par manque d’occasions de pratiquer.

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Avril 1, 2017, 6:02 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/12 "2017-04-01T18:02:06Z")

</div>

La commande avec find me paraît la plus adaptée, étant donnée qu’elle agit sur une aborescence.

Mais _-execdir_ devrait peut-être remplacer _-exec_ , pour que les fichiers html créés le soient sur la bonne branche (pas testé)

man find indique:

> -execdir commande {} +  
> Semblable à -exec, sauf que la commande indiquée sera exécutée à partir du sous-répertoire contenant le fichier correspondant, qui n’est normalement pas celui à partir duquel vous avez lancé find

---

<div class="post-metadata">

**Author:** ![Esprit](https://www.debian-fr.org/user_avatar/www.debian-fr.org/esprit/32/5917_2.png) [@Esprit](https://www.debian-fr.org/u/Esprit)\
**Post date:** [Avril 1, 2017, 7:49 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/13 "2017-04-01T19:49:49Z")

</div>

Après pas mal d’essais-erreurs, voici la commande qui a fonctionné :

```
$ find /emplacement/de/la/galerie/ -iname "*.JPG" -execdir sh -c 'touch `echo "$1" | sed "s/\.\///" | sed "s/\.JPG/\.JPG\.html/"`' sh {} \;

```

Si je suis déjà dans le bon dossier, on peut retirer l’emplacement :

```
find -iname "*.JPG" -execdir sh -c 'touch `echo "$1" | sed "s/\.\///" | sed "s/\.JPG/\.JPG\.html/"`' sh {} \;

```

Il y a moyen de faire plus propre, sans aucun doute. Mais ça a fait le job!

J’ai essayé “shopt” mais je n’ai pas réussi à faire quoique ce soit… :-/

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Avril 1, 2017, 8:39 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/14 "2017-04-01T20:39:36Z")

</div>

```auto
shopt -s nullglob globstar nocaseglob
for f in ./**/*.jpg; do :> "${f%.*}.hmtl"; done

```

---

<div class="post-metadata">

**Author:** ![Esprit](https://www.debian-fr.org/user_avatar/www.debian-fr.org/esprit/32/5917_2.png) [@Esprit](https://www.debian-fr.org/u/Esprit)\
**Post date:** [Avril 2, 2017, 1:19 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/15 "2017-04-02T13:19:40Z")

</div>

C’est beau! 🙂

Au prochain besoin (ce soir ou demain), je tente avec ta commande.  
Merci

---

<div class="post-metadata">

**Author:** ![Esprit](https://www.debian-fr.org/user_avatar/www.debian-fr.org/esprit/32/5917_2.png) [@Esprit](https://www.debian-fr.org/u/Esprit)\
**Post date:** [Avril 5, 2017, 7:22 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/16 "2017-04-05T19:22:12Z")

</div>

@Watael, je viens d’essayer ta solution et j’ai un petit soucis :

```
$ shopt -s nullglob globstar nocaseglob for f in ./**/*.jpg; do :> "${f%.*}.hmtl"; done
bash: erreur de syntaxe près du symbole inattendu « do » 

```

C’est déjà l’erreur qui m’avait bloqué la dernière fois. :-/ J’ai un peu cherché mais je ne trouve pas comment régler ça.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Avril 5, 2017, 10:04 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/17 "2017-04-05T22:04:12Z")

</div>

Bonjour **Esprit**

**Watael** t’avait donné deux lignes de commandes.

Si tu veux pouvoir utiliser les deux sur une seule ligne,  
il faudra remplacer le retour à la ligne par un **;**

```auto
shopt -s nullglob globstar nocaseglob; for f in ./**/*.jpg; do :> "${f%.*}.hmtl"; done

```

---

<div class="post-metadata">

**Author:** ![Esprit](https://www.debian-fr.org/user_avatar/www.debian-fr.org/esprit/32/5917_2.png) [@Esprit](https://www.debian-fr.org/u/Esprit)\
**Post date:** [Avril 8, 2017, 7:16 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/18 "2017-04-08T19:16:45Z")

</div>

@anon29980398: Effectivement, je n’avais pas vu!

Je n’ai plus d’erreurs. Par contre, ça ne marche tout de même pas. Les fichiers .html ne sont pas créés. Et je n’ai toujours pas compris comment “shopt” est censé fonctionner… ☹

[edit une minute plus tard: Je suis con, c’était des fichiers “.png” cette fois et plus des “.JPG” !!

```
$ shopt -s nullglob globstar nocaseglob; for f in ./**/*.png; do :> "${f%}.html"; done

```

Ça marche. J’ai modifié entre les accolades {f%.\*} =\> {f%} pour avoir l’extension d’origine avant le “.html” (nécessaire pour MinigalNano).

---

<div class="post-metadata">

**Author:** ![Watael](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/w/a4c791/32.png) [@Watael](https://www.debian-fr.org/u/Watael)\
**Post date:** [Avril 8, 2017, 7:43 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/19 "2017-04-08T19:43:47Z")

</div>

le signe pourcent n’est plus utile, alors.  
pas plus que les accolades.

---

<div class="post-metadata">

**Author:** ![Esprit](https://www.debian-fr.org/user_avatar/www.debian-fr.org/esprit/32/5917_2.png) [@Esprit](https://www.debian-fr.org/u/Esprit)\
**Post date:** [Avril 8, 2017, 8:12 UTC](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114/20 "2017-04-08T20:12:58Z")

</div>

C’est noté! 🙂 Merci encore

[Page suivante](https://www.debian-fr.org/t/script-pour-creer-un-fichier-html-pour-tous-les-fichiers-dans-un-dossier/73114.md?page=2)
