Le Thursday 28 January 2010 00:35:21 Jeremie COURREGES-ANGLAS, vous avez écrit : > Le jeudi 28 janvier 2010 à 12:01:53, christophe a écrit : > > Le Wednesday 27 January 2010 21:10:00 Jeremie COURREGES-ANGLAS, vous avez > > > > écrit : > > > Le mercredi 27 janvier 2010 à 07:38:09, christophe a écrit : > > > > [...] > Désolé donc de ne pas avoir passé plus de temps à la vérification de 10 > lignes de code... cette version devrait te donner satisfaction. > malheureusement j'ai une mauvaise nouvelle à t'annoncer : l'exécution du > script aura vraisemblablement recopié le contenu du premier mail à la suite > du dernier, dans le fichier de base ; ceci à cause du « echo "$line" >> > "$file_base$fileno" » > alors que fileno était vide. > Comme quoi un oubli d'initialisation de variable peut être facheux... > Le test [ "$line" != "" ] supprimera _toutes_ les lignes vides de _tous_ > tes mails. > Mes excuses pour le désagrément.
Merci, pour tout.
Voici ma version définitive qui m'a permis de d'obtenir autant de fichiers
mbox qu'il y a de messages dans le fichier initial :
#!/bin/bash
[ $# -eq 0 ] && printf "Usage : $0 fichier [ autrefichier... ]\n" >&2 && exit
1
fileno=1
for file_base in "$@"; do
while read -r line; do
# Peu importe le nombre exact de tirets autour de "CUT HERE"
if [[ "$line" == *"---------- CUT HERE ----------"* ]]; then
csplit -z "$file_base$fileno" -f "$file_base$fileno-" /From:/+0
rm -f "$file_base$fileno" "$file_base$fileno-00"
fileno=$((fileno + 1))
continue
fi
if [ "$line" != "" ] && [ "$line" != "\n" ]; then
echo "$line" >> "$file_base$fileno"
fi
done < "$file_base"
csplit -z "$file_base$fileno" -f "$file_base$fileno-" /From:/+0
rm -f "$file_base$fileno" "$file_base$fileno-00"
done
J'ai un peu tatonné et j'ai rajouté la suggestion de Alexandre.
Merci à tous.
--
christophe
signature.asc
Description: This is a digitally signed message part.

