Télécharger le script ici.

Voilà le script avec des explications:

####################### Ière partie: Initializations #######################

Prépare l'environnement de travail. Suit: nettoyage des répertoires s'ils existent, créations des répertoires s'ils n'existent pas, copie des répertoires constants à partir de l'archive des données ARCHIVES.


####################### DEBUT - Prépare l'environnement #######################
#(opération 2>/dev/null) veut dire toutes les erreurs vont dans un trou noir
rm ./../CONTEXTES/* 2>/dev/null;
rm ./../DUMP-TEXT/* 2>/dev/null;
rm ./../RESULTAT/* 2>/dev/null;
rm -f ./../PAGES-ASPIREES/* ;#2>/dev/null; efface le contenu de ./../PAGES-ASPIREES/
mkdir ./../CONTEXTES 2>/dev/null;
mkdir ./../DUMP-TEXT 2>/dev/null;
mkdir ./../RESULTAT 2>/dev/null;
#cp -r ./../ARCHIVES/MOTIF/* ./../MOTIF;
#cp -r ./../ARCHIVES/SENS/* ./../SENS;
#cp -r ./../ARCHIVES/URLS/* ./../URLS;

mot='BOITE';
tablo=./../RESULTAT/Resultat.html;
####################### FIN - Prépare l'environnement #######################

#compte le nombre (quantité "qte_fichier") des langues
qte_fichier=0;
for fichier in `ls ./../SENS`
    {
    let "qte_fichier+=1"
    };

####################### Commence la construction de la page avec les tableaux des liens vers les pages référentes au mot #######################
    echo "<html>
                <head>
                        <title>Vie des mots sur le web</title>   
                        <meta http-equiv='"'Content-Type'"' content='"'text/html; charset=utf-8'"' /></meta>
                </head>
                <body bgcolor=\"tan\" TEXT=\"blue\"><font COLOR=\"#FFFFFF\">" > $tablo;

#######################Crée un tableau des sens du mot #######################
    echo "    <table border=\"1\" bgcolor=\"tan\"> " >> $tablo;
    j=0; #flag nécessaire pour imprimer l'en-tête du tableau
    for fichier in `ls ./../SENS`
        {
        i=1;
        langue=${fichier//.*/}; #contient la partit du fichier qui contient le nom de la langue
        vector[1]=$langue; # un tableau avec les sens du mot étudié
        #extrait les sens des fichiers dans le répértoire /SENS
        while read line
            do
                vector[$i+1]="$i.$line";
                let "i+=1";
            done < ./../SENS/$fichier;
        qte_sens=$i; #qte_sens = (nombre des sens du mot)+1
        #imprime l'en-tête du tableau des sens s'il n'est pas déjà imprimé
        let "j+=1";
        if [ "$j" -le "1" ];
        then   
            echo " <tr><th colspan=\"$qte_sens\"> TABLEAU DES SENS ETUDIES du mot $mot</th></tr> " >> $tablo
        fi
        i=1;
        echo "<tr>" >> $tablo;
        for i in `seq 1 $qte_sens`;
        do
        echo "<td>${vector[$i]}</td>" >> $tablo;
        echo ${vector[$i]};
        done;
        echo "</tr>" >> $tablo;
        };
echo "<tr><th colspan=\"$qte_sens\">
    NOTEZ BIEN QUE LE MOTIF DOIT CONTENIR LE MOT ETUDIEE. CERTAINS SENS NE CONTIENNENT PAS CE MOT,
    DONC POUR EUX LE MOTIF DOIT ETRE CHANGE MANUELLEMENT!</th></tr> " >> $tablo;
echo "</table>" >>$tablo;
unset vector; #libère l'espace des tableaux matrix et vector   
       
####################### IIème partie: Aspirer les pages choisies #######################
# laisse un peu d'espace entre le tableau des sens et les tableaux des liens   
     
#####début de la boucle pour la lécture des fichiers dans ./../URLS
#####en même temps remplit les dossiers:./../PAGES-ASPIREES
#####                                    ./../DUMP-TEXT
#####                                    ./../CONTEXTE
i=1;
echo "Est-ce que vous voulez RE -télécharger les pages web? (o/n)";
read reponse;
echo "**************** PATIENTEZ S'IL VOUS PLAIT! LE RESULTAT VIENT... ****************";
 
#####Début de la boucle de la lecture des fichier    dans ./../URLS
for fichier in `ls ./../URLS`
{
       #commence la création d'un tableau des liens par sens et par langue (travail sur chaque fichier de ./../URLS)
    echo "<p><hr bgcolor=\"blue\"></p> " >> $tablo;
       #détermine la langue et le sens du mot dans le fichier courrant
    langue=${fichier//_*.*/}; #structure du fichier dans /URLS : "langue_numéro du sens.txt"
    temp=${fichier//*_/};#enlève la partie "langue" du fichier "langue_numéro du sens.txt"
    sens_num=${temp//.*/};#contient seulement le "numéro du sens" dans le fichier "langue_numéro du sens.txt"
   
    ########Ecrit l'en-tête du tableau pour un sens pour chaque langue
    echo "<table width=\"100%\" border=\"1\" bgcolor=\"tan\">
                <tr>
                    <th>sens $sens_num</th>
                    <th colspan=\"3\"><MARQUEE DIRECTION=\"left\" SCROLLAMOUNT=\"5\" BGCOLOR=\"tan\">Mot $mot en $langue ___Mot $mot en $langue ___Mot $mot en $langue ___Mot $mot en $langue ___</th>
                    <th> Source de la page WEB en ligne</th>
                </tr>" >>$tablo;
   
    #####début de la boucle pour la lecture d'un fichier,
    #####une ligne contient une adresse url, une page est aspirée et stockée dans ./../PAGES-ASPIREES/
    for nom in `cat ./../URLS/$fichier`
    {
           #l'url de la page est associé à la variable &nom, c'est une ligne du fichier
           # concaténation de variable dans une chaîne:
        temp="${langue}_${sens_num}_${i}"; #sert à donner un nom à la page aspirée du type "langue_sens du mot_numéro courrant de la page aspirée.html"
       
        if [ ${reponse} == "o" ] ; then
        mkdir ./PAGES-ASPIREES 2>/dev/null;
        wget -O ./../PAGES-ASPIREES/$temp.html $nom; #télécharge les pages selectionnées
        source_aspiree="./../PAGES-ASPIREES/";
        else
        source_aspiree="./../ARCHIVES/PAGES-ASPIREES/";
         fi;

    #####début transcodages en UTF-8, dossier du travail ./../PAGES-ASPIREES
           #détermine l'encodage avec du code uniligne en Perl
           # -n exécute avec tous les arguments @ARGV comme des fichiers
           # -e vérifie l'existence du fichier;la ligne s'exécute sans paramètres pour un programme
           # -lne trouve des palindromes
           # $1 valeur d'une expression régulière repérée; $_ contient la ligne courante; $_ valeur actuelle; /o exécuter une seule fois
        source_file="${source_aspiree}/${temp}.html";
        charset=$(perl -nle 'print $1 if (/charset=(.*?)"(.*?)/imo)' $source_file);
        #charset=`echo ${charset} | tr 'A-Z' 'a-z'`;# transformer en minuscules
           #echo "$i in $temp charset is $charset";
        if [ $charset <> "utf-8" ]; then
           #iconv -f encodage_original -t utf-8 fichier_original > nouveau_fichier
           #mv move ou efface des fichier ou des répertoires; renome les originaux pour utiliser le même nom pour les pages transcodées
        iconv -s -f $charset -t UTF-8 $source_file > ./../PAGES-ASPIREES/transcode_$temp.html;
           #sed -e “s/chaine1/chaine2/g” “$file” > “$file”.tmp && mv -f “$file”.tmp “$file”
        sed -e "s/charset=${charset}/charset=utf-8/g" ./../PAGES-ASPIREES/transcode_$temp.html > ./../PAGES-ASPIREES/$temp.html;
        rm ./../PAGES-ASPIREES/transcode_$temp.html
        fi;
    #####fin du transcodage

    #####début du dumpage, dossier du travail ./../DUMP-TEXT
           #le texte dans la variable &nom est filtré/dumpé et écrit dans un fichier txt; -nolist : pour enlever les URLS de references
        lynx -assume_local_charset=utf-8 -display_charset=utf-8 -nolist -dump ./../PAGES-ASPIREES/$temp.html > ./../DUMP-TEXT/$temp.txt;
    #####fin du dumpage

    #####début selecter le contexte
       #la sortie du programme est toujours nomme resultat-extraction.html il faut donc le renommer
    case "${langue}" in
        "francais" | "français")
            perl ./../ARCHIVES/minigrepmultilingue-v2.1/FRANCAIS/minigrepmultilingue.pl "UTF-8" ./../DUMP-TEXT/$temp.txt ./../MOTIF/"${langue}_motif".txt;
            cp resultat-extraction.html ./../CONTEXTES/$temp.html;   
            ;;
        "bulgare" | "russe" | "anglais")
            perl ./../ARCHIVES/minigrepmultilingue-v2.1/minigrepmultilingue.pl "UTF-8" ./../DUMP-TEXT/$temp.txt ./../MOTIF/"${langue}_motif".txt;
            cp resultat-extraction.html ./../CONTEXTES/$temp.html;
            ;;
        *)
            echo "Langue non supportée!"
            exit
           ;;
    esac ;       
    #####fin         selecter le contexte

    #####début de l'écriture de la page du résultat
        echo "        <tr>
                    <td width=\"5%\">lien $i </td>
                    <td width=\"10%\"><a href=\"./../CONTEXTES/$temp.html\">CONTEXTE $i</a></td>
                    <td width=\"7%\"><a href=\"./../DUMP-TEXT/$temp.txt\">DUMPE $i</a></td>
                    <td width=\"7%\"><a href=\"./../PAGES-ASPIREES/$temp.html\">ASPIRE $i</a></td>   
                    <td width=\"71%\"><a href=\"$nom\"> $nom </a></td>
                    </tr>" >>$tablo;
   
    #####fin de l'écriture de la page du résultat
   
    let "i+=1";
    };
    #####fin de la boucle for pour la lecture des lignes d'un fichier de ./../URLS
    };
#####fin de la boucle de la lecture des fichier    dans ./../URLS