Première rédaction de cet article le 26 janvier 2008
mkisofs est un excellent logiciel
Unix pour créer des images ISO 9660 à partir d'un ou de plusieurs répertoires locaux,
images qu'on peut ensuite graver sur CD ou
DVD. Mais mkisofs a un défaut pénible : si on
lui indique plusieurs répertoires sur la ligne de commande, il met
tous les fichiers qu'ils contiennent ensemble, ce qui fait perdre le
rangement, et ne marche pas si certains fichiers ont le même nom. Une
solution possible est dans l'option
-graft-points
.
Cette option indique à mkisofs de garder la
structure en répertoires. Avec cette option, mkisofs regarde le nom de
chaque répertoire donné sur la ligne de commande, utilise le
signe égal comme séparateur, et prend ce qui
est à droite du séparateur comme nom local et ce qui est à gauche
comme nom sur le futur CD. On écrit donc, si on veut sauvegarder
/etc/X11
et /etc/network
:
% mkisofs -r -o /var/tmp/image.iso -graft-points xorg/=/etc/X11 net/=/etc/network
Bien sûr, il n'est pas agréable de taper à la main de tels noms avec leur « = ». Mais on peut utiliser le shell pour les fabriquer. Nous nous servirons pour cela des techniques suivantes :
$(COMMANDE)
qui insère le résultat la commande (comme
le fait `COMMANDE`
mais l'avantage de cette forme
est de permettre d'emboîter plusieurs commandes).
Voici la commande qui crée les paramètres à la syntaxe qu'attend
mkisofs (la liste des répertoires à sauvegarder est dans la variable DIRS
qui vaut ici X11 network
) :
% cd /etc % for dir in $(eval ls -d $DIRS); do echo "$dir/=$(pwd)/$dir"; done X11/=/etc/X11 network/=/etc/network
La commande complète, utilisant la boucle
ci-dessus est (j'ai mis toutes les options que j'ajoute habituellement
à mkisofs, mais seule -graft-points
est
importante ici) :
% cd /etc % DIRS="X11 network" % ISO=/var/tmp/backup.iso % mkisofs -A Backups -V Backups -publisher Stephane_Bortzmeyer \ -p Stephane_Bortzmeyer -graft-points -iso-level=3 \ -J -r -o $ISO \ $(for dir in $(eval ls -d $DIRS); do echo "$dir/=$(pwd)/$dir"; done)
On utilise eval au lieu de simplement indiquer
$DIRS
car $DIRS
peut
contenir des caractères spéciaux du shell comme
l'astérisque, qui sert de
joker. eval
est nécessaire
pour qu'ils soient interprétés.
Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)
Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)