KioskeaKioskeaCommentCaMarcheInscrivez-vous, c'est gratuit !
Vendredi 16 mai 2008 - 10:32:39

Shell Script

Avis / Logiciels Autres avis
Rechercher : dans
Shell Script
par Ludovic
 Fil de Discussions
Statut : Non résolu
mardi 27 décembre 2005 à 19:01:37
Bonjour,

J'ai besoin d'un spécialiste en Shell script! En fait, je dois rendre compte d'un projet dont le but est de créer un script qui, une fois executer dans une unité de commande linux, générer un index.html dans lequel se trouvera une aborescence de fichiers (image, son, texte...) Lorsque j'éxecute ce script il me faut placer le dossier où se trouvent tout les fichiers répertoriés, en argument. Mon problème est que le corps du script est belle et bien terminé sauf que maintenant, il nous améliorer celui-ci en:
-Supprimant les caractères tels que _, -... des noms des fichiers
-Mettre des apostophes lorsque c'est le cas
-Remplacer la première lettre du nom du fichier minuscule en majuscule
...
Et c'est ces petits détails qu'il me font défaut! Et j'ai besoin d'une aide précieuse...
Merci de répondre!
Répondre à Ludovic  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par jipicy, le mardi 27 décembre 2005 à 19:28:57 Fil de Discussions
Salut,

Ben commence par nous afficher ton script avec un exemple de ce que tu veux faire (par exemple la liste de noms à modifier...)
;-) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 
Répondre à jipicy

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Ludovic, le mardi 27 décembre 2005 à 19:44:08 Fil de Discussions
Non mais le nom des fichiers je ne les connais, il faut que sa puisse marcher pour n'importe quel nom de fichier!

Mon script:
#!/bin/bash
if [ $# = 1 ]
then
echo "Erreur! Il ne faut pas placer d'argument mais placer le SCRIPT dans le dossier voulu"
else
echo "Souhaitez-vous changer le nom de la page? [Oui ou Non]"
read choixnompage
#Si l'utilisateur répond oui, on va lui demander de saisir le nouveau nom de la page
if [[ $choixnompage == "Oui" || $choixnompage == "o" || $choixnompage == "O" || $choixnompage == "oui" ]]
then
echo "Quel est le nouveau titre de la page? "
read nompage
#Cette commande va permettre à l'utilisateur d'exécuter le script autant de fois qu'il le veut (quand il effectue des mises à jour) sans afficher plusieurs fois ces dossiers et ces fichiers
rm -f index.html
#Création de l'en-tête avec le nom de la page (celui saisi par l'utilisateur) et le nom de la fenêtre
echo "<html>
<head>
<title>Ma Page</title>
<body bgcolor="lightgoldenrodyellow">
<h1><center><i><b><font face="eurostile" size=7 color="black">$nompage</font></b></i><center>" >> index.html
else
#Si l'utilisateur répond non...
rm -f index.html
#Création de l'en-tête avec le nom de la page Par défaut
echo "<html>
<head>
<title>Ma Page</title>
<body bgcolor="lightgoldenrodyellow">
<h1><center><i><b><font face="eurostile" size=7 color="black">Index</font></b></i><center>" >> index.html
fi
#On va proposer à l'utilisateur de changer les noms de ces répertoires, s'il le souhaite
echo "Souhaitez-vous changer le nom de vos répertoires? [Oui ou Non]"
read reponse
#Si l'utilisateur saisi oui...
if [[ $reponse == "o" || $reponse == "oui" || $reponse == "O" || $reponse == "Oui" ]]
then
#Cette boucle va parcourir chaque répertoire
for rep in `find -type d`
do
#On va stocker dans "nomrep", le nom du répertoire formater à partir du slash
#Avec la commande awk, on va afficher le nom du répertoire sans le slash qui se trouve au début
nomrep=`echo $rep | awk 'BEGIN{FS="/"} {print $NF}'`
#A l'aide de cette boucle, on va éliminer le fichier '.': si le répertoire est '.' alors...
if [[ ! $rep == "." ]]
then
echo "Le nom du répertoire est $nomrep. Quel est son nouveau nom? "
read nomrep
#Création des index dans chaques répertoires
touch $rep/index.html
#Création des liens avec le nom qu'aura saisi l'utilisateur
echo "<u1>
<li><a href="$rep/index.html"><font face="eurostile, verdana" size=4 color="red"><center>$nomrep</center></font></a>"­ >> index.html
#Meme commande que pour l'index, elle va permettre de détruire ce qui se trouve à l'intérieur de chaque index, à chaque execution du script
rm -f $rep/index.html
echo " <h1><g><i><font face="eurostile" size=7 color="dodgerblue"><marquee>$nomrep</marquee></font></i&­gt;</g></h1>" >> $rep/index.html
#Cette seconde boucle va parcourir chaque fichier trouvé dans chaque répertoire
for img in `ls $rep`
do
#De même que pour le nom des répertoires, on va stocker dans "nomimg", le nom du fichier formater du .*extension
#La commande va se positionner au point et afficher ce qui se trouve avant le .*extension
nomimg=`echo $img | awk 'BEGIN{FS="."} {print $NR}'`
#Test si c'est une image
if [[ ${img##*.} == "jpg" || ${img##*.} == "gif" || ${img##*.} == "bmp" ]]
then
#On va afficher le nom des images avec une icone
echo "<body bgcolor="honeydew">
<center>
<li><a href="$img"><center><font face="eurostile, verdana" size=3 color="red">$nomimg</center></font><img src="$img" align=absbottom width=120 height=110 hspace=50 vspace=10 border=1></a></td>" >> $rep/index.html
fi
#Test si c'est un fichier autre qu'une image
if [[ ${img##*.} == "ppt" || ${img##*.} == "doc" || ${img##*.} == "mp3" || ${img##*.} == "wav" || ${img##*.} == "zip" || ${img##*.} == "rar" || ${img##*.} == "txt" || ${img##*.} == "MP3" ]]
then
#On affiche que le nom du fichier sans icône
echo " <center>
<li><a href="$img"><font face="eurostile, verdana" size=3 color="red">$nomimg</font></a>
</center>
</body>
</u1>" >> $rep/index.html
fi
done
#Cette partie correspond à la création d'un lien retour vers la page d'accueil
echo "<hr width=150 color="black" align=center>
<a href="../index.html"><font face="impact, verdana" size=3 color="dodgerblue">Retour vers [$nompage]</font></a>
</head>
</html>" >> $rep/index.html
fi
done
#Si la réponse de l'utilisateur est non...
else
#Boucle pour le parcours des répertoires
for rep in `find -type d`
do
nomrep=`echo $rep | awk 'BEGIN{FS="/"} {print $NF}'`
if [[ ! $rep == "." ]]
then
touch $rep/index.html
#Création des liens avec le nom des répertoires Par défaut
echo "<u1>
<li><a href="$rep/index.html"><font face="eurostile, verdana" size=4 color="red"><center>$nomrep</center></font></a>"­ >> index.html
rm -f $rep/index.html
echo " <h1><g><i><font face="eurostile" size=7 color="dodgerblue"><marquee>$nomrep</marquee></font></i&­gt;</g></h1>" >> $rep/index.html
for img in `ls $rep`
do
nomimg=`echo $img | awk 'BEGIN{FS="."} {print $NR}'`
if [[ ${img##*.} == "jpg" || ${img##*.} == "gif" || ${img##*.} == "bmp" ]]
then
echo "<body bgcolor="honeydew">
<center>
<li><a href="$img"><center><font face="eurostile, verdana" size=3 color="red">$nomimg</center></font><img src="$img" align=absbottom width=120 height=110 hspace=50 vspace=10 border=1></a></td>" >> $rep/index.html
fi
if [[ ${img##*.} == "ppt" || ${img##*.} == "doc" || ${img##*.} == "mp3" || ${img##*.} == "wav" || ${img##*.} == "zip" || ${img##*.} == "rar" || ${img##*.} == "txt" || ${img##*.} == "MP3" ]]
then
echo " <center>
<li><a href="$img"><font face="eurostile, verdana" size=3 color="red">$nomimg</font></a>
</center>
</body>
</u1>" >> $rep/index.html
fi
done
echo "<hr width=150 color="black" align=center>
<a href="../index.html"><font face="impact, verdana" size=3 color="dodgerblue">Retour vers [$nompage]</font></a>
</head>
</html>" >> $rep/index.html
fi
done
fi
echo "Quel est le nom du propriétaire de la page? "
read proppage
#Affichage d'une citation avec le nom du propriétaire de la page
echo "<blockquote><i><font size=1 color="red">Page réalisé par $proppage</font></i></blockquote><center>" >> index.html
echo " "
echo " "
echo "Votre arborescence vient d'être réalisé avec succès... Merci!"
fi

Merci!
Répondre à Ludovic

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Phiphi57, le mardi 27 décembre 2005 à 20:49:06 Fil de Discussions
Salut!

regardes du coté de awk ou de sed (je sais pas bien les utiliser, mais il me semble qu'ils te permettent de faire ce que tu veux)
man awk
man sed

Phiphi
Répondre à Phiphi57

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Ludovic, le mardi 27 décembre 2005 à 22:22:20 Fil de Discussions
J'ai déjà essayé, mais ça ne m'a pas changé grand chose!! :(
Répondre à Ludovic

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par [Dal], le mercredi 28 décembre 2005 à 15:28:31 Fil de Discussions
Salut Ludovic,

Sed ou Awk fonctionnent habituellement correctement. Si tu n'arrives pas à les faire "marcher" c'est sans doutes que tu t'y prends mal :P

En fait la commande "tr" serait aussi une piste à creuser, au moins pour certaines de tes demandes.

Il est difficule de te donner un exemple de syntaxe dans la mesure où ce que tu veux faire n'apparaît pas clairement... alors interprétons les données de ton problème :


1. -Supprimant les caractères tels que _, -... des noms des fichiers

Tu n'expliques pas pourquoi tu as besoin de faire celà, mais bon. Si je comprend bien ton script, le nom des fichiers est contenu dans $img. Avant de créer ta variable $nomimg avec $img, tu pourrais faire comme celà :

$img = `echo $img | tr -d "_-"`

Celà vaut pour ton exemple de "_" et "-".

Note bien que celà va modifier la variable, mais pas le nom du fichier sur ton système de fichiers. Je suppose que tu sais ce que tu fais.


2. -Mettre des apostophes lorsque c'est le cas

où et pourquoi ?


3. -Remplacer la première lettre du nom du fichier minuscule en majuscule

$img = `echo $img | awk '{ initiale=toupper(substr($0,1,1)); reste=(substr($0,2)); print initiale reste;}'`

Pour faire 1. et 3. en une seule ligne, tu peux chaîner tr et awk.

$img = `echo $img | tr ... | awk ...`

Là aussi, celà ne renomme pas le fichier.


Dal
Répondre à [Dal]

6


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Ludovic, le jeudi 29 décembre 2005 à 15:47:36 Fil de Discussions
Justement, je veux changer le nom des fichiers en enlevant tous ces métacaractères afin que dans mon index.html, les noms des fichiers s'affichent avec les modifications effectuées c'est à dire sans les - ou _!
En ce qui concerne les apostrophes, je cherche à rajouter des apostrophes aux noms des fichiers lorsque ça doit être le cas.
Du genre:
le nom du fichier est: litalie.jpeg
En rajoutant une option a mon script, dans mon index sera affiché:
L'italie
Répondre à Ludovic

8


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par [Dal], le jeudi 29 décembre 2005 à 17:35:58 Fil de Discussions
Si tu veux renommer en plus tes fichiers, tu le fais avec la commande mv, en utilisant une variable temporaire de stockage.

man mv

Pour tes apostrophes, à moins de trouver un logiciel tout fait, ou d'utiliser un correcteur orthographique avec des résultats pas garantis (ispell, aspell), je ne vois pas comment faire. Ou alors, tu y vas manuellement.


Dal
Répondre à [Dal]

7


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Ludovic, le jeudi 29 décembre 2005 à 15:52:39 Fil de Discussions
Voilà l'erreur que j'ai lorsque j'effectue la commande que vous m'avez proposez:

Souhaitez-vous changer le nom de vos répertoires? [Oui ou Non]
oui
Le nom du répertoire est Musique. Quel est son nouveau nom?
Music
condense.sh: line 61: Diverses_Guitares.jpg: command not found
condense.sh: line 61: Guitare.jpg: command not found
condense.sh: line 61: Imagine.wav: command not found
condense.sh: line 61: Note_de_Musique.jpg: command not found
condense.sh: line 61: Piano_Noir.jpg: command not found
condense.sh: line 61: Thumbs.db: command not found
condense.sh: line 61: index.html: command not found
Le nom du répertoire est Plage. Quel est son nouveau nom?
Playa
condense.sh: line 61: La_Plage_du_Costa-Rica.jpg: command not found
condense.sh: line 61: Les_plages_de_france.ppt: command not found
condense.sh: line 61: Nuages_et_Plage.jpg: command not found
condense.sh: line 61: Plage_Teorahau.jpg: command not found
condense.sh: line 61: Thumbs.db: command not found
condense.sh: line 61: index.html: command not found
condense.sh: line 61: l_océan.jpg: command not found
Le nom du répertoire est Simpsons. Quel est son nouveau nom?
Simps
condense.sh: line 61: A_la_recherche_d_un_soldat_vert.jpg: command not found
condense.sh: line 61: Bart.jpg: command not found
condense.sh: line 61: La_famille_Simpsons.jpg: command not found
condense.sh: line 61: Matrix.jpg: command not found
condense.sh: line 61: Saison17.txt: command not found
condense.sh: line 61: Simptrix.jpg: command not found
condense.sh: line 61: Thumbs.db: command not found
condense.sh: line 61: index.html: command not found
Le nom du répertoire est Voiture. Quel est son nouveau nom?
Tuture
condense.sh: line 61: Cadillac.rar: command not found
condense.sh: line 61: Dessin_voiture.gif: command not found
condense.sh: line 61: Thumbs.db: command not found
condense.sh: line 61: Voiture_blanche.jpg: command not found
condense.sh: line 61: Voiture_grise.jpg: command not found
condense.sh: line 61: Voiture_jaune.jpg: command not found
condense.sh: line 61: index.html: command not found
Quel est le nom du propriétaire de la page?
Ludo
Répondre à Ludovic

9


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par [Dal], le jeudi 29 décembre 2005 à 17:38:16 Fil de Discussions
Je ne suis pas devin pour savoir quelle est la ligne 61 de ton script (ni celles qui vont autour).

De toute évidence, de toutes façons, cette erreur n'est pas liée à l'exécution des commandes précitées, mais au fait que tu passes à l'interpréteur de commandes bash une commande qui n'en est pas une (qui est en fait un nom de fichier). Dégogue ton script.


Dal
Répondre à [Dal]

10


  • 1
    Ce message vous semble utile, votez !
  • Ce message ne vous semble pas utile, votez !
  • Signaler ce message aux modérateurs
Par [Dal], le jeudi 29 décembre 2005 à 17:50:35 Fil de Discussions
Hmmm.. s/gogue/bogue/


Dal
Répondre à [Dal]

11


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Par Ludovic, le jeudi 29 décembre 2005 à 18:24:24 Fil de Discussions 
Bon ben en tout cas, merci pour tes conseils!
Répondre à Ludovic
Discussions pertinentes trouvées dans le forum
27/02 10h51[Shell-script] garder une partie de texteLinux/Unix27/02 11h413
23/01 12h31shell script sed avec quotesLinux/Unix23/01 17h194
14/01 00h26exo sur le shell-scriptLinux/Unix14/01 20h593
03/07 22h31Insertion dans un shell script sous unixLinux/Unix03/07 23h311
06/06 09h21[Shell-script] supprimer partie de texteLinux/Unix07/06 09h144
Plus de discussions sur « Shell Script » Discussion en cours Discussion fermée Problème résolu
Répondre
Titre du message :
Votre pseudo:
Votre email :
Message: 
  •  
  •  
Options: Recevoir les réponses par mail.
 

Aide