Le goulot d'étranglement sera probablement la lecture du lecteur de DVD, nous devons donc veiller à ne le lire qu'une seule fois, ou à le lire deux fois mais à des intervalles suffisamment rapprochés pour que les données soient toujours dans le cache. Cette dernière solution semble difficile, alors optons pour la première.
Il faut qu'on ait un duplicateur quelque part. Si nous nous limitons aux commandes basiques de Shell, le seul choix est tee
. Nous devons donc convertir l'entrée (un arbre de fichiers) en un flux, alimenter le flux à tee
et de reconvertir chaque flux de sortie en un arbre de fichiers. L'outil pour faire cela est un archiveur. La compression sur quelque chose qui restera en mémoire est un gaspillage, alors utilisons simplement tar
.
Tuyaux ( command0 | command1
) nous permettent d'envoyer la sortie d'une commande à une autre commande. Nous avons besoin d'intégrer la sortie de tee
en deux d'autres commandes, donc une autre construction bash s'avère utile : command1 >(command2)
crée un tube qui est passé à command1
comme première commande plutôt que de devenir la sortie standard de command2
. (Regardez la substitution de processus dans le manuel bash).
Voici la commande (non testée) :
mkdir /media/disk0/copy_of_dvd /media/disk1/copy_of_dvd
cd /media/cdrom
tar cf - . | tee >(tar xf - -C /media/disk0/copy_of_dvd) | tar xf - -C /media/disk1/copy_of_dvd