Durée : 4 heures
wc
et des commandes head
et tail
, proposez un script split-2.sh
qui permet la division d'un fichier texte passé en paramètre en deux parties de taille égales (le plus possible au moins). Le nom du fichier texte a diviser sera passé en paramètre (y compris avec une arborescence). Le préfixe des fichiers issus de la division sera le nom du fichier source. Les extensions des deux fichiers seront respectivement .sp1
et .sp2
head
, tail
, cat
, wc
, dirname
, basename
group-2.sh
permettant la reconstruction à partir des fichiers issus de split-2.sh
. Le script group-2.sh
admet un seul paramètre : le préfixe des fichiers constituant la source.head
, cat
, redirection de stdout
split-2.sh
afin de construire le script split-n.sh
permettant le partage - en parties de tailles équivalentes - d'un fichier passé en paramètre. Le nombre de divisions N
sera passé en paramètre du script split-n.sh
. Cette valeur N
sera stockée en première ligne de la série de fichiers de partage avec le nom du fichier original.group-2.sh
afin de construire le script group-n.sh
permettant la fusion des fichiers de partage. Sur la première ligne du premier fichier de partage se trouve N
, le nombre de parties et le nom du fichier original. La valeur N
récupérée permettra de vérifier si l'ensemble des fichiers nécessaires à la reconstruction sont fournis. Le nom du fichier original permettra de recomposer sous le même nom qu'à l'origine. En conséquence, group-n.sh
ne prend qu'un seul paramètre : le préfixe des fichiers à recomposer.uuencode/uudecode
uuencode [fichier] nom
: est utilisé pour encoder un fichier en n’utilisant que des caractères ASCII
7 bits (codes entre 0 et 127), par exemple pour le transmettre sur un réseau ne transmettant que les 7 bits de poids faible. uuencode
lit le fichier (ou stdin
si l’on ne précise pas de nom) et écrit la version encodée sur la sortie standard stdout
. Le paramètre nom
précise le nom du fichier pour le décodage par uudecode
.uudecode [fichier]
: Décode un fichier encodé par uuencode
. Si l’argument fichier n’est pas spécifié, uudecode
lit stdin
. Le nom du fichier résultat est précisé dans le codage (paramètre nom
de uuencode
).vi-ref.pdf
disponible en annexe de la page du module de système d'exploitation. Faite également l'expérience avec un fichier d'image de type .jpg
.split-n.sh
et group-n.sh
, construisez splitter.sh
. splitter.sh
qui permet désormais de traiter tous types de fichiers y compris les fichiers binaires (en plus des fichiers ASCII
). Pour cela vous utiliserez uuencode
et uudecode
. En plus des options issues des questions précédentes, splitter.sh
assurera aussi bien la division que la fusion grâce respectivement aux options -d
et -g
. uuencode
, uudecode
, head
, tail
, cat
, wc
, let
, redirection de stdout
, …Exemple : $> ./splitter.sh -d 6 /tmp/maphoto.jpg $> ls maphoto.sp1 maphoto.sp2 maphoto.sp3 maphoto.sp4 maphoto.sp5 maphoto.sp6 $> for i in maphoto.sp* > do > mv $i toto.`echo $i | cut -d . -f 2` > done $> ls toto.sp1 toto.sp2 toto.sp3 toto.sp4 toto.sp5 toto.sp6 $> ./splitter.sh toto $> ls toto.sp1 toto.sp2 toto.sp3 toto.sp4 toto.sp5 toto.sp6 maphoto.jpg $> rm toto.sp3 maphoto.jpg $> ls toto.sp1 toto.sp2 toto.sp4 toto.sp5 toto.sp6 $> ./splitter.sh toto ERROR : Cannot merge prefix 'toto'