= Auto-référencer =
Table des matières par chapitres.
 1 Titre page 3
 2 Auto-référencer page 5
 2.1 Table des matières par chapitres page 5
 2.2 Codes shell pour créer la page « Annexe » 7
 2.2.1 Annexer 7
 2.2.2 Lister 9
 2.2.3 Télécharger 12
 2.2.4 Ajouter sclt 15
 2.2.5 Ajouter scli 19
 2.2.5.1 Le fichier d'entête 19
 2.2.5.2 Le fichier de commandes
 2.3 Tester les codes 23
 2.3.1 Commençons par le fichier de commandes principal « annexer » 23
 2.3.1.1 Lançons les tests 24
 2.3.2 Poursuivons avec le fichier de commandes « lister » 25
 2.3.2.1 Les lignes qui méritent notre attention 25
 2.3.2.2 Lançons les tests 26
 2.3.3 Poursuivons avec le fichier de commandes « télécharger » 27
 2.3.3.1 Les lignes qui méritent notre attention 27
 2.3.3.2 Lançons les tests 28
 2.3.4 Poursuivons avec le fichier de commandes « ajouter_sclt » 29
 2.3.4.1 Les lignes qui méritent notre attention 29
 2.3.4.2 Lançons les tests 32
 2.3.5 Poursuivons avec le fichier de commandes « ajouter_scli » 33
 2.3.5.1 Le fichier d'entête 33
self-referencing
Codes shell pour créer la page « Annexe ».
Annexer.
Annexer ou annexer.sh est la page principale qui permet de produire la page « Annexe », elle utilise les commandes shell "lister", "télécharger", "ajouter_sclt" et "ajouter_scli"
La première partie qui précède #O## annexer ################ est l'entête. Elle utilisée dans tous les fichiers de commandes de cet article.
dans le fichier de commandes "ajouter_scli" cette entête est volontairement séparée pour la démonstration, avec son inclusion par la commande "source".
"Les autres fichiers de commandes incluent directement cette entête pour faciliter la compréhension des codes."
clear
RepCom=~/Annexer
echo "Répertoire des commandes : "$RepCom
if test -d $RepCom
 then 
 echo "Le répertoire des commandes : "$RepCom" est correct !";
 else
 mkdir $RepCom
 echo "Le répertoire de travail "$RepCom" a été créé !";
fi
cd $RepCom
if test -z "$1"
 then echo "Erreur, pas de paramètre en entrée : le paramètre est \"${1}\" "
 echo "Syntaxe de la commande : ./annexer <fichier>, (exemple : Annexer LivreTest)"
 echo " "
 exit 1;
 else echo "Projet : création de la page "$1.annexe" du livre : \"${1}\" "
fi
Projet=$RepCom/$1
echo "Répertoitre de projet : "$Projet
echo "----------"
if test -d $Projet
 then 
 echo "Le répertoire des commandes : "$Projet" est correct !";
 else
 mkdir $Projet
 echo "Le répertoire de travail "$Projet" a été créé !";
fi
Site="fr.wikibooks.org"
SitePrefix="https:\/\/fr.wikibooks.org\/wiki\/"
echo "----------"
echo "Nom du projet: "$1
echo "Site: "$Site
echo "Préfixe du site: "$SitePrefix
echo "----------"
echo "Liste des pages et articles à analyser, fichier : "$Projet/$1".list si il existe."
if test -a $Projet/$1.list;
 then 
 echo "le fichier : "$Projet/$1".list existe."; 
 else 
 echo -e "\033[31mle fichier : "$Projet/$1".list n'a pas encore été créé.\033[0m";
fi
ls -al $Projet 
echo "----------"
cd $Projet
echo "effacer tous les fichiers *.html *.str *.img *.lnk tmp temp *.tmp *.temp *.list ?"
echo -e "\033[31m 'o' pour approuver l'effacement des fichiers obsolètes. \033[0m " 
echo " Retour-chariot pour continuer, Ctrl-C pour quitter."
read -n1 -p -s Inkey
echo "Inkey = "$Inkey
if test [$Inkey = 'o']
 then {
 cd $Projet
 echo -e "\033[31mSuppression des fichiers obsolètes.\033[0m "
 rm *.html *.str *.img *.lnk tmp temp *.tmp *.temp *.list
 else echo "Pas de suppression de fichiers ! ... suite ..."
fi
../lister $1
echo "Code de retour de la commande lister : "$?
exit 0
../télécharger $1
echo "Code de retour de la commande télécharger : "$?
echo "Code de retour de la commande ajouter_sclt : "$?
echo "Code de retour de la commande ajouter_scli : "$?
exit 0
Lister.
Créer une liste des liens vers les pages qui composent le livre.
clear
RepCom=~/Annexer
echo "Répertoire des commandes : "$RepCom
if test -d $RepCom
 then 
 echo "Le répertoire des commandes : "$RepCom" est correct !";
 else
 mkdir $RepCom
 echo "Le répertoire de travail "$RepCom" a été créé !";
fi
cd $RepCom
if test -z "$1"
 then echo "Erreur, pas de paramètre en entrée : le paramètre est \"${1}\" "
 echo "Syntaxe de la commande : ./annexer <fichier>, (exemple : Annexer LivreTest)"
 echo " "
 exit 1;
 else echo "Projet : création de la page "$1.annexe" du livre : \"${1}\" "
fi
Projet=$RepCom/$1
echo "Répertoitre de projet : "$Projet
echo "----------"
if test -d $Projet
 then 
 echo "Le répertoire des commandes : "$Projet" est correct !";
 else
 mkdir $Projet
 echo "Le répertoire de travail "$Projet" a été créé !";
fi
Site="fr.wikibooks.org"
SitePrefix="https:\/\/fr.wikibooks.org\/wiki\/"
echo "----------"
echo "Nom du projet: "$1
echo "Site: "$Site
echo "Préfixe du site: "$SitePrefix
echo "----------"
echo "Liste des pages et articles à analyser, fichier : "$Projet/$1".list si il existe."
if test -a $Projet/$1.list;
 then 
 echo "le fichier : "$Projet/$1".list existe."; 
 else 
 echo -e "\033[31mle fichier : "$Projet/$1".list n'a pas encore été créé.\033[0m";
fi
ls -al $Projet 
echo "----------"
cd $Projet
rm *.list
 if test -r $Projet/$1.contenu; 
 then {
 chmod 444 $Projet/$1.contenu
 echo "LivreTest.list avec LivreTest.contenu :"
 cat $Projet/$1.contenu | sed "s/\[\[/$SitePrefix/g" | tr '|' '\n' | grep "wiki" > $Projet/$1.list
 elif test -r $Projet/$1.compilé 
 then {
 chmod 444 $Projet/$1.compilé
 echo "LivreTest.list avec LivreTest.compilé :"
 cat $Projet/$1.compilé | sed "s/:\[\[/$SitePrefix/g" | tr '|' '\n' | sed "s/\]\]//g" | grep "wiki" > $Projet/$1.list
fi
echo ""
cat $Projet/$1.list
echo " "
read -p "Si tout est correct : retour-chariot une pour continuer, Ctrl-C pour quitter > "
exit 0
Télécharger.
Télécharger le code source de la page ou la sous page grâce à la liste obtenue dans la section Télécharger.
clear
RepCom=~/Annexer
echo "Répertoire des commandes : "$RepCom
if test -d $RepCom
 then 
 echo "Le répertoire des commandes : "$RepCom" est correct !";
 else
 mkdir $RepCom
 echo "Le répertoire de travail "$RepCom" a été créé !";
fi
cd $RepCom
if test -z "$1"
 then echo "Erreur, pas de paramètre en entrée : le paramètre est \"${1}\" "
 echo "Syntaxe de la commande : ./annexer <fichier>, (exemple : Annexer LivreTest)"
 echo " "
 exit 1;
 else echo "Projet : création de la page "$1.annexe" du livre : \"${1}\" "
fi
Projet=$RepCom/$1
echo "Répertoitre de projet : "$Projet
echo "----------"
if test -d $Projet
 then 
 echo "Le répertoire des commandes : "$Projet" est correct !";
 else
 mkdir $Projet
 echo "Le répertoire de travail "$Projet" a été créé !";
fi
Site="fr.wikibooks.org"
SitePrefix="https:\/\/fr.wikibooks.org\/wiki\/"
echo "----------"
echo "Nom du projet: "$1
echo "Site: "$Site
echo "Préfixe du site: "$SitePrefix
echo "----------"
echo "Liste des pages et articles à analyser, fichier : "$Projet/$1".list si il existe."
if test -a $Projet/$1.list;
 then 
 echo "le fichier : "$Projet/$1".list existe."; 
 else 
 echo -e "\033[31mle fichier : "$Projet/$1".list n'a pas encore été créé.\033[0m";
fi
ls -al $Projet 
echo "----------"
echo "Créer le fichier de projet "$Projet/$1.prj
cd $Projet
echo "créer la hirarchie complète des répertoires du livre"$1
wget -r -linf -k -p -E -i $1.list -o wget-log.txt
echo "----------"
echo "créer les fichiers exploitables pour douomenter la page Annexe et les lister dans le fichier " $Projet/$1.prj
wget -r -i $1.list -o wget-log.txt
ls --format=single-column --hide=*.txt --hide=*.list --hide=*.prj --hide=*.annexe --hide=*.co* --hide=Sauv --hide=*.org > $Projet/$1.prj
cat $Projet/$1.prj
echo "----------"
return 0
Ajouter sclt.
Ajouter la section article, source, licence, contributeur(s).
clear
RepCom=~/Annexer
echo "Répertoire des commandes : "$RepCom
if test -d $RepCom
 then 
 echo "Le répertoire des commandes : "$RepCom" est correct !";
 else
 mkdir $RepCom
 echo "Le répertoire de travail "$RepCom" a été créé !";
fi
cd $RepCom
if test -z "$1"
 then echo "Erreur, pas de paramètre en entrée : le paramètre est \"${1}\" "
 echo "Syntaxe de la commande : $0 <fichier>, (exemple : $0 LivreTest)"
 echo " "
 exit 1;
 else echo "Projet : création de la page "$1.annexe" du livre : \"${1}\" "
fi
Projet=$RepCom/$1
echo "Répertoitre de projet : "$Projet
echo "----------"
if test -d $Projet
 then 
 echo "Le répertoire des commandes : "$Projet" est correct !";
 else
 mkdir $Projet
 echo "Le répertoire de travail "$Projet" a été créé !";
fi
Site="fr.wikibooks.org"
SitePrefix="https:\/\/fr.wikibooks.org\/wiki\/"
echo "----------"
echo "Nom du projet: "$1
echo "Site: "$Site
echo "Préfixe du site: "$SitePrefix
echo "----------"
echo "Liste des pages et articles à analyser, fichier : "$Projet/$1".list si il existe."
if test -a $Projet/$1.list;
 then 
 echo "le fichier : "$Projet/$1".list existe."; 
 else 
 echo -e "\033[31mle fichier : "$Projet/$1".list n'a pas encore été créé.\033[0m";
fi
ls -al $Projet 
echo "----------"
PageSclt=$Projet/$1.sclt
echo $PageSclt
cd $Projet
echo "créer la page "$PageSclt
echo "----------"
echo "= Annexe =" > $PageSclt
echo "<references />" » $PageSclt
echo " " » $PageSclt
echo "" » $PageSclt
echo "== Contenus ==" » $PageSclt
echo "<small>" » $PageSclt
cat $Projet/$1".list" | tr ' ' '_' | tr '\n' '%' | sed "s/%/\n\n/g" » $PageSclt
echo " " » $PageSclt
echo "=== Source de cette édition de version imprimable ou compilée ===" » $PageSclt
cat $Projet/$1".list" | tr ' ' '_' | tr '\n' '%' | sed "s/%/%\n/g" |grep $1% | tr -d % » $PageSclt
echo "</small>" » $PageSclt
echo " " » $PageSclt
echo "" » $PageSclt
echo "== Sources licences et contributeurs des articles ==" » $PageSclt
echo "Les "sources" listées pour chaque article fournissent des informations de licence plus détaillées, y compris le statut des droits d'auteurs, les détenteurs de ces droits et les conditions de licence." » $PageSclt
echo " " » $PageSclt
echo "<small><small>" » $PageSclt
echo "----------"
Liste=~/Annexer/$1/$1.prj
echo "Fichier de liste : "$Liste
 while read ligne
 do 
 echo ""
 echo " ligne lue = "$ligne
 echo ""
 mkd -pws '**' $Projet/$ligne $Projet/$ligne.tmp | tr ',' '\n' > $Projet/$ligne.str
 echo "*** Références : articles, src, lic, contrib. "
 echo ""$ligne"" » $PageSclt
 echo ""$ligne"" » $Projet/$ligne.article
 cat $Projet/$ligne.article
 echo -n ", "source : "https://"$Site"/w/index.php?oldid=" > $Projet/$ligne.RevisionId
 cat $Projet/$ligne.str | grep -n -m 1 -i -e wgRevisionId | tr -d ':' | sed "s/\"/%/g" | cut -d'%' -f3 » $Projet/$ligne.RevisionId
 cat $Projet/$ligne.RevisionId » $PageSclt
 cat $Projet/$ligne.RevisionId
 echo -n ", "licence : "" » $PageSclt 
 echo -n ", "licence : "" > $Projet/$ligne.license
 cat $Projet/$ligne.str | grep -n -m 1 -i -e license | sed "s/\"\//%\//g" | cut -d'%' -f2 | sed "s/\/\//https:\/\//g" » $Projet/$ligne.license
 #T (french footer licence) cat $Projet/$ligne.str | grep -n -m 1 -i -e licence | sed "s/\"\//%\//g" | tr '"' '%' | cut -d'%' -f4 | sed "s/\/\//https:\/\//g" > $Projet/$ligne.licence
 cat $Projet/$ligne.license » $PageSclt
 cat $Projet/$ligne.license
 echo -n ", "auteur(s) : "" » $PageSclt
 cat $Projet/$ligne.str | grep -n -m 1 -i -e wgRelevantUserName | sed "s/\"/%/g" | cut -d'%' -f4 > $Projet/$ligne.auteur
 cat $Projet/$ligne.auteur » $PageSclt
 cat $Projet/$ligne.auteur 
 echo "" » $PageSclt
 done < $Liste
 echo "</small></small>" » $PageSclt
 echo "" » $PageSclt
exit 0
Ajouter scli.
Ajouter la section image, source, license, contributeurs(s) à la page "Annexe".
Le fichier d'entête.
Ce fichier doit être inclus dans le fichier de commandes "ajouter_scli"
clear
RepCom=~/Annexer
echo "Répertoire des commandes : "$RepCom
if test -d $RepCom
 then 
 echo "Le répertoire des commandes : "$RepCom" est correct !";
 else
 mkdir $RepCom
 echo "Le répertoire de travail "$RepCom" a été créé !";
fi
cd $RepCom
if test -z "$1"
 then echo "Erreur, pas de paramètre en entrée : le paramètre est \"${1}\" "
 echo "Syntaxe de la commande : $0 <fichier>, (exemple : $0 LivreTest)"
 echo " "
 exit 1;
 else echo "Projet : création de la page "$1.annexe" du livre : \"${1}\" "
fi
Projet=$RepCom/$1
echo "Répertoitre de projet : "$Projet
echo "----------"
if test -d $Projet
 then 
 echo "Le répertoire des commandes : "$Projet" est correct !";
 else
 mkdir $Projet
 echo "Le répertoire de travail "$Projet" a été créé !";
fi
Site="fr.wikibooks.org"
SitePrefix="https:\/\/fr.wikibooks.org\/wiki\/"
echo "----------"
echo "Nom du projet: "$1
echo "Site: "$Site
echo "Préfixe du site: "$SitePrefix
echo "----------"
echo "Liste des pages et articles à analyser, fichier : "$Projet/$1".list si il existe."
if test -a $Projet/$1.list;
 then 
 echo "le fichier : "$Projet/$1".list existe."; 
 else 
 echo -e "\033[31mle fichier : "$Projet/$1".list n'a pas encore été créé.\033[0m";
fi
ls -al $Projet 
echo "----------"
cd $Projet
Le fichier de commandes.
Cette partie est consultable sur les versions plus récentes de "Auto-référencer".
Pour consulter la section la plus élaborée, voyez "Annexer", la troisième partie, imprimable.
Tester les codes.
Les fichiers de commandes shell peuvent être éprouvés successivement, sous linux ou sous d'autres systèmes d'exploitation acceptant les commandes "shell" : Windows 10, MinGw, Cygwin, ...
Pour effectuer ces tests il faut se placer dans le répertoire utilisateur et créer un répertoire des commandes, dans les exemples : mkdir ~/annexer
Les fichiers de commandes annexer, lister, télécharger, ajouter-sclt, ajouter-scli, sont prévus pour être placés dans ce répertoire.
Les commandes peuvent être éprouvées avec tous les livres disponibles. Pour ces tests nous avons utilisé le livre « LivreTest ».
Commençer par le fichier de commandes principal « annexer ».
Ce fichier de commandes contrôle le bon fonctionnement de l"'entête" qui est commune à tous les fichiers de commandes. cette entête pourrait s'appeler "header.sh" et être "inclus" dans les fichiers de commandes avec l'option "source header.sh" s'il est dans le même "répertoire des commandes", ou reconnu dans l'environnement (path).
Il vérifie que le répertoire des fichiers de commandes est correct, que le nom du "projet" est bien présent sur la ligne de commande en premier paramètre, comme dans l'exemple suivant : "./annexer LivreTest" où la variable de "projet" est "LivreTest", le nom du livre.
Les commandes de ce fichier créent le répertoire des fichiers de commandes si il n'existe pas. Il va créer le répertoire du projet dans lequel on trouvera tous les fichiers intermédiaires, notamment : "Projet.list", "Projet.prj", "Projet.annexe", tous les fichiers html des "Articles" et les documents extraits les concernant; Article avec les extensions .article, .auteur, .license, voire aussi .licence du bas de page, .RevisionID, etc ...
Pseudo codes obtenu avec la commande "mkd -Snws OPTHw annexer" :
 2 #P Nom du fichier de commandes : annexer
 3 #P Syntaxe : "annexer <nom du livre>"
 4 #P Exemple : "./annexer LivreTest" à la console.
 5 #P Date de création : 24 mars 2020
 6 #P Modifié le : 7 avril 2020 par GC
 7 #P Version sur WikiLivres le : 9 avril 2020
 9 #H vider (nettoyer) l'écran.
 16 #H tester la présence du répertoire racine des commandes, si il n'existe pas, le créer.
 26 #T echo "Paramètre d'entrée : "$1
 27 #T exit 2
 29 #H tester la présence du paramètre de la ligne de commandes
 38 #H initialiser la variable "Projet" = répertoire de projet.
 42 #T read -p "Si tout est correct : retour-chariot une pour continuer, Ctrl-C pour quitter >"
 44 #H tester la présence du répertoire du projet, si il n'existe pas, le créer.
 53 #H initialiser les variables 'Site' (nom du serveur) et 'SitePrefix'.
 57 #H nettoyer l'écran, afficher les variables globales et le contenu du répertoire de projet.
 58 #T clear
 74 #H entrer dans la répertoire de travail.
 77 #O## annexer ################
 79 #O effacer tous les fichiers *.html *.str *.img *.lnk tmp temp *.tmp *.temp *.list ?
 80 #O si le la réponse au clavier est 'o' (oui !), effacer les fichiers du répertoire de projet (nom du livre).
 81 #O sinon, continuer.
 96 #O créer le fichier contenant la liste des articles à analyser. (../lister $1)
 99 #w exit 0
 101 #T créer les répertoires et sous répertoires complets du livre. (../télécharger $1)
 105 #O créer la "page Annexe" et ajouter les sources, contributeurs, droits de copie du texte des articles.
 106 #O sclt : s=source, c=contributeurs, l=license, t=texte des articles. (../ajouter_sclt $1)
 110 #O ajouter les sources, licence, contributeurs des images. (../ajouter_scli $1)
Lançer les tests.
Faire un brouillon avec le micro-ordinateur sous linux (ou autre système acceptant les shells linux).
Note : Si vous lancez la commande ./annexer LivreTest de n'importe répertoire, les répertoires ~/Annexer et ~/annexer LivreTest seront automatiquement créés. Il suffira de copier le fichier de commandes "Annexer" ou "annexer.sh" dans le répertoire de fichiers de commandes : "mv ./annexer ~/Annexer/annexer" ou "mv ./annexer.sh ~/Annexer/annexer.sh"
Poursuivre avec le fichier de commandes « lister ».
Le but est d'obtenir un fichier qui content la liste des liens vers les pages d'un de wikilivres à documenter.
Nous pouvons obtenir ces liens grâce aux pages « Contenus » des Versions imprimables et « Compilation » issue de la compilation d'une page. (Menu à gauche d'une page wikimedia.)
Il est aussi possible d'éditer et d'enregistrer manuellement une telle liste.
Les lignes qui méritent une attention.
La ligne 91 dans l'édition du 11 avril 2020 :
cat $Projet/$1.contenu | sed "s/\[\[/$SitePrefix/g" | tr '|' '\n' | sed "s/\]\]//g" | grep "wiki" > $Projet/$1.list
Cette ligne prend en compte le texte de la page Contenus de la Version imprimable du livre pour créer le fichier de liste.
La ligne elle même signifie : 
La ligne 101 de la même édition :
cat $Projet/$1.compilé | sed "s/:\[\[/$SitePrefix/g" | tr '|' '\n' | sed "s/\]\]//g" | grep "wiki" > $Projet/$1.list
Cette ligne prend en compte le texte de la page Compilation de la Version compilée du livre pour créer le fichier de liste.
Le commentaire est le même que pour la ligne précédent à ceci près qu'au premier filtre on supprime aussi le caractère ':' du début de ligne des fichiers issus de la compilation.
Lancer les tests.
On devrait obtenir le fichier ~/Annexe/LivreTest/LivreTest.list :
Vérifier que l'on a modifié les autorisations du fichier LivreTest.contenus afin qu'il ne puisse pas être supprimé par mégarde lors des manipulations de fichiers. 
 ~/Annexer$ ls -l ~/Annexer/LivreTest/LivreTest.contenu
 -r--r--r-- 1 gc gc 353 avril 3 16:57 /home/gc/Annexer/LivreTest/LivreTest.contenu
Poursuivre avec le fichier de commandes « télécharger ».
Le but est de télécharger tous les fichiers html qui composent le livre grâce au fichier de liste obtenu précédemment.
Les lignes qui méritent une attention.
lignes 80 à 87 de la version du 10avril 2020
<Syntaxhighlight lang="bash">
wget -r -linf -k -p -E -i $1.list -o wget-log.txt
echo "----------"
echo "créer les fichiers exploitables pour documenter la page Annexe et les lister dans le fichier " $Projet/$1.prj
wget -r -i $1.list -o wget-log.txt
ls --format=single-column --hide=*.txt --hide=*.list --hide=*.prj --hide=*.annexe --hide=*.co* --hide=Sauv --hide=*.org > $Projet/$1.prj
cat $Projet/$1.prj</Syntaxhighlight>
La première ligne crée la structure complète des répertoires et fichiers, depuis la racine du site, jusqu'aux fichiers html qui composent le livre.
La cinquième ligne crée les fichiers html à analyser, dans le répertoire courant.
La sixième ligne crée le fichier de projet $Projet/$1.prj. Ce fichier nous sera utile pour créer la page « Annexe » complète "sclti" concaténation de "sclt" et "scli".   sclti signifie : "Sources, Contributeur(s), Licences, Textes, et Images"; on entend par Textes les contenus des articles, et par Images toutes les illustrations.
 ls -a ./LivreTest ./Article* dans le répertoire du projet "LivreTest".
Lancer les tests.
 Copier le code du chapitre Télécharger dans un éditeur et enregistrer ce code dans le répertoire Annexe sous le nom « télécharger » ou « télécharger.sh »
 Autoriser l'exécution du code par la commande chmod 777 ~/Annexe/télécharger
 Lancer la commande ./télécharger LivreTest
On devrait obtenir :
 ls -R fr.wikibooks.org/ dans le répertoire du projet "LivreTest".
 ls -a ./LivreTest ./Article* dans le répertoire du projet "LivreTest".
 cat LivreTest.prj dans le répertoire du projet "LivreTest".
Poursuivre avec le fichier de commandes « ajouter_sclt ».
Le but est de créer l'entête de la page Annexe et d'y ajouter la liste des "articles avec les sources, licences, contributeurs".
Les numéros des pages n'est possibles que lorsque la version imprimable aura été créée, avec une post-indexation et une post-annexion.
Les lignes qui méritent une attention.
Remarque : Dans les explications du code on entend par projet le nom du projet entré en paramètre dans la commande "./ajouter_sclt projet"
Lignes 125-126 de la version du 13 avril 2020
 #O extraire et copier toutes les chaînes de caractères de $line dans le fichier $ligne.str et les dupliquer à l'écran.
 mkd -pws '**' $Projet/$ligne $Projet/$ligne.tmp | tr ',' '\n' > $Projet/$ligne.str
mkd n'est pas inclus dans les distributions linux. les paquets et sources sont téléchargeable pour tous les systèmes d'exploitation.
Pour toute informations complémentaires : mkd (commande unix), Mkd_(Extracteur_de_documents)
Cette ligne de commandes extrait tous les commentaires avec une sortie dans un fichier "projet.tmp" ainsi que vers la "sortie standard" où elle est reprise pour être listée en colonne grâce au séparateur de chaînes ','.
Lignes 131-134
 #O article :
 echo "$ligne" » $PageSclt
 echo "$ligne" » $Projet/$ligne.article
 cat $Projet/$ligne.article
$ligne est la variable lue ligne par ligne du fichier de liste "projet.prj" dans une boucle "tant qu'il y a des lignes à lire, faire ..."
Cette ligne est aussi le nom de l'article qui va être analysé.
Lignes 136-140 
 #O source :
 echo -n ", "source : "https://"$Site"/w/index.php?oldid=" > $Projet/$ligne.RevisionId
 cat $Projet/$ligne.str | grep -n -m 1 -i -e wgRevisionId | tr -d ':' | sed "s/\"/%/g" | cut -d'%' -f3 » $Projet/$ligne.RevisionId
 cat $Projet/$ligne.RevisionId » $PageSclt
 cat $Projet/$ligne.RevisionId
La deuxième ligne crée le fichier de "projet.RevisionId" dans lequel on écrit une chaîne de caractères sans retour à la ligne.
La troisième ligne :
   cat ouvre le flux du fichier "projet.str"
 | retient la ligne qui contient wgRevisionId,
 | supprime le caractère ':' qu'il contient
 | remplace les caractères '"' par le caractère '%'
 | coupe la chaîne à l'endroit où se trouvent les caractères '%' et sélectionne le champ 3.
 » la chaîne résultante est ajoutée au fichier "projet.RevisionId"
Lignes 143-153
 #O licence : 
 #w licence s'écrit license en anglais (langage de base en programmation).
 #echo ", "Droits de copie :"" » ArticleUn.tmp
 #cat ArticleUn.str | grep -n -m 1 -i -e license | sed "s/\"\//%\//g" | cut -d'%' -f2 |sed "s/\/\//https:\/\//g" » ArticleUn.tmp
 echo -n ", "licence : "" » $PageSclt 
 echo -n ", "licence : "" > $Projet/$ligne.license
 cat $Projet/$ligne.str | grep -n -m 1 -i -e license | sed "s/\"\//%\//g" | cut -d'%' -f2 | sed "s/\/\//https:\/\//g" » $Projet/$ligne.license
 #T (french footer licence) cat $Projet/$ligne.str | grep -n -m 1 -i -e licence | sed "s/\"\//%\//g" | tr '"' '%' | cut -d'%' -f4 | sed "s/\/\//https:\/\//g" > $Projet/$ligne.licence
 cat $Projet/$ligne.license » $PageSclt
 cat $Projet/$ligne.license
Les lignes 1 et 2 sont des commentaires à l'usage des programmeurs.
Les lignes 3 et 4 sont des lignes de tests
La ligne 6 ajoute ", "licence" :" au fichier "projet.sclt"
La ligne 7 crée le fichier "projet.lisence" et y ajoute la même chaîne qu'à la ligne 6 
La ligne 8 :
   cat ouvre le flux du fichier "projet.str",
 | retient la ligne qui contient "lisence",
 | sélectionne la chaîne "/ et la remplace par la chaîne %/,
 | supprime '%' et coupe la chaîne au caractère '%' puis sélectionne le deuxième tronçon (-f2), il existe aussi (-f2-3, -f2-4) etc.
 | remplacer les caractères // par https://
 » copier la chaîne dans le fichier "projet.lisence"
ligne 9 : mêmes remarques que précédemment par sélection du bas de page en français avec "licence".
ligne 10 : ajout de la chaîne "projet.lisense" au fichier "projet.sclt"
ligne 11 : ajout à l'écran, peut être masqué à l'écran et copié dans un fichier "projet.log.txt" avec la commande "./ajouter_clt projet > projet.log.txt"
Lignes 155-159
 #O auteur(s) : 
 echo -n ", "auteur(s) : "" » $PageSclt
 cat $Projet/$ligne.str | grep -n -m 1 -i -e wgRelevantUserName | sed "s/\"/%/g" | cut -d'%' -f4 > $Projet/$ligne.auteur
 cat $Projet/$ligne.auteur » $PageSclt
 cat $Projet/$ligne.auteur
La ligne 1 est un commentaire
La ligne 2 ajoute la chaîne de caractères , "auteur(s) : " au fichier "projet.sclt"
la ligne 3 trie la ligne qui contient "wgRelevantUserName", la chaîne est coupée et la partie de la chaîne qui contient le nom de l'utilisateur est copiée dans le fichier "projet.auteur"
les lignes 4 et 5 copient respectivement le contenu du fichier "projet.auteur" dans le fichier "projet.sclt", puis à la console.
Lancer les tests.
 cat LivreTest.sclt dans le répertoire du projet "LivreTest"
Poursuivre avec le fichier de commandes « ajouter_scli ».
Dans les articles on inclut des illustrations, des images, des photos, le but est d'extraire de ces articles; les liens vers ces fichiers, ainsi que les licences, auteurs, "voire le chapitre ou le sous chapitre, afin de les retrouver dans les textes, faute de numéro de page". 
Le fichier d'entête.
Ce fichier doit être inclus dans le fichier de commandes "ajouter_scli"
clear
RepCom=~/Annexer
echo "Répertoire des commandes : "$RepCom
if test -d $RepCom
 then 
 echo "Le répertoire des commandes : "$RepCom" est correct !";
 else
 mkdir $RepCom
 echo "Le répertoire de travail "$RepCom" a été créé !";
fi
cd $RepCom
if test -z "$1"
 then echo "Erreur, pas de paramètre en entrée : le paramètre est \"${1}\" "
 echo "Syntaxe de la commande : $0 <fichier>, (exemple : $0 LivreTest)"
 echo " "
 exit 1;
 else echo "Projet : création de la page "$1.annexe" du livre : \"${1}\" "
fi
Projet=$RepCom/$1
echo "Répertoitre de projet : "$Projet
echo "----------"
if test -d $Projet
 then 
 echo "Le répertoire des commandes : "$Projet" est correct !";
 else
 mkdir $Projet
 echo "Le répertoire de travail "$Projet" a été créé !";
fi
Site="fr.wikibooks.org"
SitePrefix="https:\/\/fr.wikibooks.org\/wiki\/"
echo "----------"
echo "Nom du projet: "$1
echo "Site: "$Site
echo "Préfixe du site: "$SitePrefix
echo "----------"
echo "Liste des pages et articles à analyser, fichier : "$Projet/$1".list si il existe."
if test -a $Projet/$1.list;
 then 
 echo "le fichier : "$Projet/$1".list existe."; 
 else 
 echo -e "\033[31mle fichier : "$Projet/$1".list n'a pas encore été créé.\033[0m";
fi
ls -al $Projet 
echo "----------"
cd $Projet