Bonjour à tous,
J’ai une galerie propulsée par minigalnano 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
Salut,
C’est pas les solutions qui manquent. Tu sais coder en quoi ?
salut,
en bash, jouer avec shopt globstar
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
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 :
for f in ./**/*.jpg; do <cmds>; done```
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.
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 de le confirmer…
Je veux juste apprendre
c’est quoi un alinéa dans ce contexte?
et je suis intéressé par ton shopt juste pas encore regardé
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<
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.
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
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… :-/
shopt -s nullglob globstar nocaseglob
for f in ./**/*.jpg; do :> "${f%.*}.hmtl"; done
C’est beau! 
Au prochain besoin (ce soir ou demain), je tente avec ta commande.
Merci
@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.
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 ;
shopt -s nullglob globstar nocaseglob; for f in ./**/*.jpg; do :> "${f%.*}.hmtl"; done
@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).
le signe pourcent n’est plus utile, alors.
pas plus que les accolades.