Suite à un problème du serveur de mails de la fac (virus ?),
les messages stockés ont été répartis aléatoirement sur les comptes
des divers utilisateurs. Ma machine est configurée pour rapatrier
automatiquement les mails toutes les 5 minutes, et du coup, je me suis
retrouvé avec plus de 10,000 mails et mon disque dur saturé.
En fait, beaucoup de ces mails sont présents en un grand nombre d'exemplaires avec parfois l'adresse du destinataire qui change.
Je voudrais donc écrire un script qui efface tous les doublons.
J'utilise sylpheed, donc les mails sont stockés dans un répertoire sous forme de fichiers (un par mail) identifiés par leur numéro d'ordre.
Je cherche un moyen de ne garder plus qu'un exemplaire de chacun des
fichiers pour pouvoir les redispatcher à leurs destinataires respectifs.
J'ai pensé à comparer les fichiers sur la base de leur taille et du sujet. Tans pis si quelques-uns passent à la trappe.
Pour l'instant j'ai tapé ça :
#!/bin/sh
rm=/bin/rm
# créer un fichier trié avec en colonnes la taille et le nom
# des fichiers (>=1,1K)
# Le dernier grep vire la ligne "total" et les fichiers de moins
# 1,1K
ls -l -h --sort=size [0-9]* \
| sed -e "s/^.* \([0-9],*[0-9]*[MK]\).* \([0-9]\+\)/\1 \2/" \
| grep -v "[tr]" > sorted
# tailles de fichier par ordre décroissant
grep -o "^[0-9],*[0-9]*[MK]" sorted | uniq > tailles
while read size
do
# créer un répertoire où sont déplacés les fichiers de taille # $size
if [ ! -d $size ]
then
mkdir $size
fi
for file in `grep $size sorted | grep -o "[0-9]\+$"`
do
# pour l'instant je fais un cp
mv $file $size
done
# lister les sujets *différents* dans ces fichiers
grep -h "Subject:" $size/* | uniq > $size/subjects
# ne recopier que les fichiers avec des sujets distincts
# dans le répertoire original
while read subj
do
mv `grep -l "$subj" $size/* | head -1` ./ # /!\ ICI
done < $size/subjects
$rm -rf $size
done < tailles
Le problème vient des sujets qui peuvent contenir des caractères spéciaux (comme [] pour les listes de diffusion) à protéger par des
backslash. Il faut donc d'abord transformer $subj pour que le bon
argument soit passé à grep, et la je rame.
J'ai mis le script en entier, parce que c'est du gros bricolage et si
vous avez des conseils pour l'améliorer, ils sont les bienvenus.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Pascal Bourguignon
Yves Kuhry writes:
Bonjour,
Suite à un problème du serveur de mails de la fac (virus ?), les messages stockés ont été répartis aléatoirement sur les comptes des divers utilisateurs. Ma machine est configurée pour rapatrier automatiquement les mails toutes les 5 minutes, et du coup, je me suis retrouvé avec plus de 10,000 mails et mon disque dur saturé. En fait, beaucoup de ces mails sont présents en un grand nombre d'exemplaires avec parfois l'adresse du destinataire qui change.
Je voudrais donc écrire un script qui efface tous les doublons. J'utilise sylpheed, donc les mails sont stockés dans un répertoire sous forme de fichiers (un par mail) identifiés par leur numéro d'ordre.
Je cherche un moyen de ne garder plus qu'un exemplaire de chacun des fichiers pour pouvoir les redispatcher à leurs destinataires respectifs. J'ai pensé à comparer les fichiers sur la base de leur taille et du sujet. Tans pis si quelques-uns passent à la trappe.
Pour l'instant j'ai tapé ça : [...]
Les messages sont identifiés de manière unique avec... tada! le Message-ID!
On peut encore avoir des doublons dans le cas des virus ou du spam si ils envoyent plusieurs messages contenant le même texte. On peut alors résoudre le problème en faisant un md5sum sur le corps du message:
cp $(for msg in * ; do echo ${msg}:$(awk 'BEGIN{h=1;}/^$/{h=0;}{if(h==0){print $0}}'<$msg | md5sum -b); done | sort -u -t: +1 | sed -e 's/:.*//') ../messages-uniques
To vote Democrat or Republican, it's like changing of cabin in the Titanic.
Yves Kuhry <gamotte@hotmail.com> writes:
Bonjour,
Suite à un problème du serveur de mails de la fac (virus ?), les
messages stockés ont été répartis aléatoirement sur les comptes des
divers utilisateurs. Ma machine est configurée pour rapatrier
automatiquement les mails toutes les 5 minutes, et du coup, je me
suis retrouvé avec plus de 10,000 mails et mon disque dur saturé.
En fait, beaucoup de ces mails sont présents en un grand nombre
d'exemplaires avec parfois l'adresse du destinataire qui change.
Je voudrais donc écrire un script qui efface tous les doublons.
J'utilise sylpheed, donc les mails sont stockés dans un répertoire
sous forme de fichiers (un par mail) identifiés par leur numéro
d'ordre.
Je cherche un moyen de ne garder plus qu'un exemplaire de chacun des
fichiers pour pouvoir les redispatcher à leurs destinataires
respectifs. J'ai pensé à comparer les fichiers sur la base de leur
taille et du sujet. Tans pis si quelques-uns passent à la trappe.
Pour l'instant j'ai tapé ça :
[...]
Les messages sont identifiés de manière unique avec... tada! le Message-ID!
On peut encore avoir des doublons dans le cas des virus ou du spam si
ils envoyent plusieurs messages contenant le même texte. On peut
alors résoudre le problème en faisant un md5sum sur le corps du
message:
cp $(for msg in * ; do
echo ${msg}:$(awk 'BEGIN{h=1;}/^$/{h=0;}{if(h==0){print $0}}'<$msg
| md5sum -b);
done | sort -u -t: +1 | sed -e 's/:.*//') ../messages-uniques
Suite à un problème du serveur de mails de la fac (virus ?), les messages stockés ont été répartis aléatoirement sur les comptes des divers utilisateurs. Ma machine est configurée pour rapatrier automatiquement les mails toutes les 5 minutes, et du coup, je me suis retrouvé avec plus de 10,000 mails et mon disque dur saturé. En fait, beaucoup de ces mails sont présents en un grand nombre d'exemplaires avec parfois l'adresse du destinataire qui change.
Je voudrais donc écrire un script qui efface tous les doublons. J'utilise sylpheed, donc les mails sont stockés dans un répertoire sous forme de fichiers (un par mail) identifiés par leur numéro d'ordre.
Je cherche un moyen de ne garder plus qu'un exemplaire de chacun des fichiers pour pouvoir les redispatcher à leurs destinataires respectifs. J'ai pensé à comparer les fichiers sur la base de leur taille et du sujet. Tans pis si quelques-uns passent à la trappe.
Pour l'instant j'ai tapé ça : [...]
Les messages sont identifiés de manière unique avec... tada! le Message-ID!
On peut encore avoir des doublons dans le cas des virus ou du spam si ils envoyent plusieurs messages contenant le même texte. On peut alors résoudre le problème en faisant un md5sum sur le corps du message:
cp $(for msg in * ; do echo ${msg}:$(awk 'BEGIN{h=1;}/^$/{h=0;}{if(h==0){print $0}}'<$msg | md5sum -b); done | sort -u -t: +1 | sed -e 's/:.*//') ../messages-uniques
To vote Democrat or Republican, it's like changing of cabin in the Titanic.
DIG
On Sun, 3 Oct 2004 00:46:24 +0200, wrote:
[...]
Je cherche un moyen de ne garder plus qu'un exemplaire de chacun des fichiers pour pouvoir les redispatcher à leurs destinataires respectifs. J'ai pensé à comparer les fichiers sur la base de leur taille et du sujet. Tans pis si quelques-uns passent à la trappe.
Je pense que pour ne pas réinventer la roue, il vous faut utiliser ``formail'' (formail - mail (re)formatter). Apparemment, l'option ``-D'' c'est exactement ce qu'il vous faut :
,---[ man formail ]--- | -D maxlen idcache | Formail will detect if the Message-ID of the current | message has already been seen using an idcache file | of approximately maxlen size. If not splitting, it | will return success if a duplicate has been found. | If splitting, it will not output duplicate messages. | If used in conjunction with -r, formail will look at | the mail address of the envelope sender instead at | the Message-ID. `---[ ]---
A plus tard,
-- DIG (Dmitri I GOULIAEV) Aahz's law: The best way to get information on usenet is not to ask a question, but to post the wrong information.
On Sun, 3 Oct 2004 00:46:24 +0200, gamotte@hotmail.com wrote:
[...]
Je cherche un moyen de ne garder plus qu'un exemplaire de chacun des
fichiers pour pouvoir les redispatcher à leurs destinataires respectifs.
J'ai pensé à comparer les fichiers sur la base de leur taille et du sujet.
Tans pis si quelques-uns passent à la trappe.
Je pense que pour ne pas réinventer la roue, il vous faut utiliser
``formail'' (formail - mail (re)formatter). Apparemment, l'option
``-D'' c'est exactement ce qu'il vous faut :
,---[ man formail ]---
| -D maxlen idcache
| Formail will detect if the Message-ID of the current
| message has already been seen using an idcache file
| of approximately maxlen size. If not splitting, it
| will return success if a duplicate has been found.
| If splitting, it will not output duplicate messages.
| If used in conjunction with -r, formail will look at
| the mail address of the envelope sender instead at
| the Message-ID.
`---[ ]---
A plus tard,
--
DIG (Dmitri I GOULIAEV)
Aahz's law: The best way to get information on usenet is
not to ask a question, but to post the wrong information.
Je cherche un moyen de ne garder plus qu'un exemplaire de chacun des fichiers pour pouvoir les redispatcher à leurs destinataires respectifs. J'ai pensé à comparer les fichiers sur la base de leur taille et du sujet. Tans pis si quelques-uns passent à la trappe.
Je pense que pour ne pas réinventer la roue, il vous faut utiliser ``formail'' (formail - mail (re)formatter). Apparemment, l'option ``-D'' c'est exactement ce qu'il vous faut :
,---[ man formail ]--- | -D maxlen idcache | Formail will detect if the Message-ID of the current | message has already been seen using an idcache file | of approximately maxlen size. If not splitting, it | will return success if a duplicate has been found. | If splitting, it will not output duplicate messages. | If used in conjunction with -r, formail will look at | the mail address of the envelope sender instead at | the Message-ID. `---[ ]---
A plus tard,
-- DIG (Dmitri I GOULIAEV) Aahz's law: The best way to get information on usenet is not to ask a question, but to post the wrong information.
Yves Kuhry
Les messages sont identifiés de manière unique avec... tada! le Message-ID!
2 lignes ! je me sens un peu ridicule avec mon gros script tout à coup.
On peut encore avoir des doublons dans le cas des virus ou du spam si ils envoyent plusieurs messages contenant le même texte. On peut alors résoudre le problème en faisant un md5sum sur le corps du message:
cp $(for msg in * ; do echo ${msg}:$(awk 'BEGIN{h=1;}/^$/{h=0;}{if(h==0){print $0}}'<$msg | md5sum -b); done | sort -u -t: +1 | sed -e 's/:.*//') ../messages-uniques
Bon, ben là rien à dire, respect. Je vais étudier ça afin de comprendre les détails, merci beaucoup. Merci aussi à Dmitri. Formail est installé sur ma machine, je vais essayer de comprendre comment ça marche.
-- Yves Kuhry
Les messages sont identifiés de manière unique avec... tada! le Message-ID!
2 lignes ! je me sens un peu ridicule avec mon gros script tout à coup.
On peut encore avoir des doublons dans le cas des virus ou du spam si
ils envoyent plusieurs messages contenant le même texte. On peut
alors résoudre le problème en faisant un md5sum sur le corps du
message:
cp $(for msg in * ; do
echo ${msg}:$(awk 'BEGIN{h=1;}/^$/{h=0;}{if(h==0){print $0}}'<$msg
| md5sum -b);
done | sort -u -t: +1 | sed -e 's/:.*//') ../messages-uniques
Bon, ben là rien à dire, respect.
Je vais étudier ça afin de comprendre les détails, merci beaucoup.
Merci aussi à Dmitri. Formail est installé sur ma machine, je vais
essayer de comprendre comment ça marche.
2 lignes ! je me sens un peu ridicule avec mon gros script tout à coup.
On peut encore avoir des doublons dans le cas des virus ou du spam si ils envoyent plusieurs messages contenant le même texte. On peut alors résoudre le problème en faisant un md5sum sur le corps du message:
cp $(for msg in * ; do echo ${msg}:$(awk 'BEGIN{h=1;}/^$/{h=0;}{if(h==0){print $0}}'<$msg | md5sum -b); done | sort -u -t: +1 | sed -e 's/:.*//') ../messages-uniques
Bon, ben là rien à dire, respect. Je vais étudier ça afin de comprendre les détails, merci beaucoup. Merci aussi à Dmitri. Formail est installé sur ma machine, je vais essayer de comprendre comment ça marche.
-- Yves Kuhry
Pascal Bourguignon
Yves Kuhry writes:
Les messages sont identifiés de manière unique avec... tada! le Message-ID!
2 lignes ! je me sens un peu ridicule avec mon gros script tout à coup.
Non, il ne faut pas. Ce qui compte, c'est de bien comprendre ce qu'on écrit. Si ça doit faire 20 lignes, ça peut être plus clair qu'avec deux lignes. Il y a des auteurs qui écrivent comme Proust, et il y a des auteurs qui écrivent comme Matsuo Basho.
On peut encore avoir des doublons dans le cas des virus ou du spam si ils envoyent plusieurs messages contenant le même texte. On peut alors résoudre le problème en faisant un md5sum sur le corps du message:
cp $(for msg in * ; do echo ${msg}:$(awk 'BEGIN{h=1;}/^$/{h=0;}{if(h==0){print $0}}'<$msg | md5sum -b); done | sort -u -t: +1 | sed -e 's/:.*//') ../messages-uniques
Bon, ben là rien à dire, respect. Je vais étudier ça afin de comprendre les détails, merci beaucoup. Merci aussi à Dmitri. Formail est installé sur ma machine, je vais essayer de comprendre comment ça marche.
2 lignes ! je me sens un peu ridicule avec mon gros script tout à coup.
Non, il ne faut pas. Ce qui compte, c'est de bien comprendre ce qu'on
écrit. Si ça doit faire 20 lignes, ça peut être plus clair qu'avec
deux lignes. Il y a des auteurs qui écrivent comme Proust, et il y a
des auteurs qui écrivent comme Matsuo Basho.
On peut encore avoir des doublons dans le cas des virus ou du spam si
ils envoyent plusieurs messages contenant le même texte. On peut
alors résoudre le problème en faisant un md5sum sur le corps du
message:
cp $(for msg in * ; do
echo ${msg}:$(awk 'BEGIN{h=1;}/^$/{h=0;}{if(h==0){print $0}}'<$msg
| md5sum -b);
done | sort -u -t: +1 | sed -e 's/:.*//') ../messages-uniques
Bon, ben là rien à dire, respect.
Je vais étudier ça afin de comprendre les détails, merci beaucoup.
Merci aussi à Dmitri. Formail est installé sur ma machine, je vais
essayer de comprendre comment ça marche.
2 lignes ! je me sens un peu ridicule avec mon gros script tout à coup.
Non, il ne faut pas. Ce qui compte, c'est de bien comprendre ce qu'on écrit. Si ça doit faire 20 lignes, ça peut être plus clair qu'avec deux lignes. Il y a des auteurs qui écrivent comme Proust, et il y a des auteurs qui écrivent comme Matsuo Basho.
On peut encore avoir des doublons dans le cas des virus ou du spam si ils envoyent plusieurs messages contenant le même texte. On peut alors résoudre le problème en faisant un md5sum sur le corps du message:
cp $(for msg in * ; do echo ${msg}:$(awk 'BEGIN{h=1;}/^$/{h=0;}{if(h==0){print $0}}'<$msg | md5sum -b); done | sort -u -t: +1 | sed -e 's/:.*//') ../messages-uniques
Bon, ben là rien à dire, respect. Je vais étudier ça afin de comprendre les détails, merci beaucoup. Merci aussi à Dmitri. Formail est installé sur ma machine, je vais essayer de comprendre comment ça marche.
To vote Democrat or Republican, it's like changing of cabin in the Titanic.
Yves Kuhry
On 03 Oct 2004 18:40:04 +0200 Pascal Bourguignon wrote:
Yves Kuhry writes:
2 lignes ! je me sens un peu ridicule avec mon gros script tout à coup.
Non, il ne faut pas. Ce qui compte, c'est de bien comprendre ce qu'on écrit. Si ça doit faire 20 lignes, ça peut être plus clair qu'avec deux lignes. Il y a des auteurs qui écrivent comme Proust, et il y a des auteurs qui écrivent comme Matsuo Basho.
N'empêche que je serai content,le jour ou je maîtriserai suffisamment les options de grep, sed et compagnie pour écrire des haikus moi aussi. Merci pour le Proust, tu aurais pu dire Sulitzer.
-- Yves Kuhry
On 03 Oct 2004 18:40:04 +0200
Pascal Bourguignon <spam@mouse-potato.com> wrote:
Yves Kuhry <gamotte@hotmail.com> writes:
2 lignes ! je me sens un peu ridicule avec mon gros script tout à coup.
Non, il ne faut pas. Ce qui compte, c'est de bien comprendre ce qu'on
écrit. Si ça doit faire 20 lignes, ça peut être plus clair qu'avec
deux lignes. Il y a des auteurs qui écrivent comme Proust, et il y a
des auteurs qui écrivent comme Matsuo Basho.
N'empêche que je serai content,le jour ou je maîtriserai suffisamment
les options de grep, sed et compagnie pour écrire des haikus moi aussi.
Merci pour le Proust, tu aurais pu dire Sulitzer.
On 03 Oct 2004 18:40:04 +0200 Pascal Bourguignon wrote:
Yves Kuhry writes:
2 lignes ! je me sens un peu ridicule avec mon gros script tout à coup.
Non, il ne faut pas. Ce qui compte, c'est de bien comprendre ce qu'on écrit. Si ça doit faire 20 lignes, ça peut être plus clair qu'avec deux lignes. Il y a des auteurs qui écrivent comme Proust, et il y a des auteurs qui écrivent comme Matsuo Basho.
N'empêche que je serai content,le jour ou je maîtriserai suffisamment les options de grep, sed et compagnie pour écrire des haikus moi aussi. Merci pour le Proust, tu aurais pu dire Sulitzer.
Au lieu de sed '...', on peut utiliser cut -d: -f1
On peut encore avoir des doublons dans le cas des virus ou du spam si ils envoyent plusieurs messages contenant le même texte. On peut alors résoudre le problème en faisant un md5sum sur le corps du message:
cp $(for msg in * ; do echo ${msg}:$(awk 'BEGIN{h=1;}/^$/{h=0;}{if(h==0){print $0}}'<$msg | md5sum -b); done | sort -u -t: +1 | sed -e 's/:.*//') ../messages-uniques
Au lieu de sed '...', on peut utiliser cut -d: -f1
On peut encore avoir des doublons dans le cas des virus ou du spam si
ils envoyent plusieurs messages contenant le même texte. On peut
alors résoudre le problème en faisant un md5sum sur le corps du
message:
cp $(for msg in * ; do
echo ${msg}:$(awk 'BEGIN{h=1;}/^$/{h=0;}{if(h==0){print $0}}'<$msg
| md5sum -b);
done | sort -u -t: +1 | sed -e 's/:.*//') ../messages-uniques
Au lieu de sed '...', on peut utiliser cut -d: -f1
On peut encore avoir des doublons dans le cas des virus ou du spam si ils envoyent plusieurs messages contenant le même texte. On peut alors résoudre le problème en faisant un md5sum sur le corps du message:
cp $(for msg in * ; do echo ${msg}:$(awk 'BEGIN{h=1;}/^$/{h=0;}{if(h==0){print $0}}'<$msg | md5sum -b); done | sort -u -t: +1 | sed -e 's/:.*//') ../messages-uniques