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
Attachment:
signature.asc
Description: This is a digitally signed message part.