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

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. :slight_smile:

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! :slight_smile:

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

@MicP: 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… :frowning:

[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.

C’est noté! :slight_smile: Merci encore

Bonjour

pour shopt, voir dans la page man du bash
tu entre :

man bash

et quand la page man de bash est affichée,
tu peux faire une recherche avec le motif shopt en tapant :
/ shopt
en tapant plusieurs fois sur la touche n tu trouvera les occurrences suivantes,
en tapant sur la touche N l’occurence précédente

En tapant sur h tu aura l’aide en ligne du pager qui est utilisé pour afficher les pages man
(par défaut sur debian, c’est la commande less)

et la touche q sert à quitter

Merci pour ces précisions!

J’avais tenté un “man shopt”, je n’avais pas trouvé ce que je cherchais de manière explicite et je n’avais pas eu le temps de fouiller plus loin.

Je ne savais pas comment faire une recherche dans un man, par exemple… Quand je devais le faire, j’utilisais un pipe vers grep…

En fait, shopt permet de contrôler les options de l’interpréteur de commandes bash
et on le retrouve aussi dans la page man des fonctions intégrées (builtins) dans l’interpréteur de commandes bash
Donc, on le retrouve aussi dans :

man builtins

[HORS SUJET]
Je me suis aussi ajouté ces quelques lignes à la fin de mon ~/.bashrc

# pager less en couleurs pour les "man pages"
#  Voir aussi :
#    man termcap
#    man console_codes
export                           \
LESS_TERMCAP_mb=$'\e[1;31m'      \
LESS_TERMCAP_md=$'\e[1;38;5;74m' \
LESS_TERMCAP_me=$'\e[0m'         \
LESS_TERMCAP_se=$'\e[0m'         \
LESS_TERMCAP_so=$'\e[1;44;33m'   \
LESS_TERMCAP_ue=$'\e[0m'         \
LESS_TERMCAP_us=$'\e[1;32m'

[/HORS SUJET]

Aide de bash, il existe aussi «help»:
man bash_, puis /shopt montre de nombreuses occurences du mot shopt, et pour d’autres mots-clés, c’est bien pire.

Pour une fonction bash, la commande «help shopt» extrait immédiatement le bon paragraphe.

Bonjour

Pour une explication concernant le % et pour les {}
Il y a cette page web : http://wiki.bash-hackers.org/syntax/pe

1 J'aime

Merci pour toutes vos explications, c’est super intéressant! :blush:

Rajoute trois espaces dans le motif

/   shopt

et à la troisième occurrence (tape 2 fois sur la touche n)
tu trouvera ce que tu ne pourra pas voir avec

help shopt

Mais c’est dommage de ne pas lire les autres occurrences car elles permettent d’en apprendre beaucoup plus sur cette commande.

C’est juste, on apprends beaucoup de chose avec man bash, mais help a aussi son utilité: quand il s’agit juste de se rappeler la syntaxe, les options, help fait gagner du temps.

Je ne pensais pas à l’astuce des 3 espaces, merci.