~robin/

Bienvenue ! Welcome ! (english below)
Merci à tilde.institute de fournir cette machine et cet espace sur Internet.
Si quelque chose vous intéresse je vous conseille de l'enregistrer, car il y a de fortes chances pour que cette page évolue et soit remaniée.
N'attendez pas des mises à jours régulières.
Le site est principalement en français.

Hi!
Many thanks to tilde.institute for making this server avalaible online.
If something is of interest to you, I suggest you save it.
Don't except a lot of updates.
The website is mainly in french.


Sommaire / Contents


tilde.institute: mdir to mbox [english]

I read mails with the mail(1) program. I could not do so in tilde.institute because mails are delivered in a directory (mdir) and mail(1) cannot read it. It only reads mbox (please correct me if I am wrong).

In the directory where mails are sent (Maildir), there is a subdirectory (new) with unread mails containing a file for each mails. You cannot cat all these files together because mdir and mbox mails are put differently. Mbox needs a first line looking like it (the day number has to be 07 and not 7): From sender@mail.org Sat May 07 15:27:00 2023.
One can find two lines begining by From and Date in a mdir file: echo $(grep -m 1 ^From mdirfile; grep -m 1 ^Date mdirfile)
Which outputs something like:
From: "Name of the sender" <sender@mail.org> Date: Sat, 7 May 2023 15:27:00 -0600
The results need a few tweaks: sed -e 's/From:/From/' -e 's/Date:/Date/' -e 's/".\{1,\}"//' -e 's/<//' -e 's/>//' -e 's/,//' -e 's/\ \([0-9]\)\ /\ 0\1\ /'
Which outputs something like:
From Name of the sender sender@mail.org Date Sat 07 May 2023 15:27:00 -0600
And now we can select the fields we need: awk '{ print $1, $(NF-7), $(NF-5), $(NF-3), $(NF-4), $(NF-1), $(NF-2) }'
Which outputs something like: From sender@mail.org Sat May 07 15:27:00 2023
The first line is mbox compatible. The most difficult is done!

The rest will consist of concatenating this result in a new file and add the content of the mail right after. Let's see how to concatenate mutiple mdir mails in a single mbox file with a loop in ~/Maildir/new/.


for i in *; do \
echo $(grep -m 1 ^From "$i"; grep -m 1 ^Date "$i") | \
sed -e 's/From:/From/' -e 's/Date:/Date/' -e 's/".\{1,\}"//' -e 's/<//' -e 's/>//' -e 's/,//g' -e 's/\ \([0-9]\)\ /\ 0\1\ /' | \
awk '{ print $1, $(NF-7), $(NF-5), $(NF-3), $(NF-4), $(NF-1), $(NF-2) }' >> ../mbox-tilde && \
cat "$i" >> ../mbox-tilde && \
printf "\n" >> ../mbox-tilde; \
done

The resulting file can be read with mail(1)! Then the content of ~/Maildir/new/ can be emptied.


Récupérer des fichiers en ligne modifiés récemment

Je ne suis pas régulièrement connecté à Internet. Pour m'assurer que je ne rate pas de mises à jour ou de nouveautés sur les quelques sites que je visite j'utilise le programme ftp(1) fourni de base dans OpenBSD.

ftp(1) a une option bien pratique, -T, qui compare l'horodatage d'un fichier distant avec sa copie locale et ne télécharge le fichier que si les dates diffèrent.
Ainsi si le fichier a été modifié, il est à nouveau téléchargé. Dans le cas contraire rien n'est fait vu que la copie locale est déjà la dernière version du fichier.

Comme je n'ai pas qu'un fichier à vérifier à chaque fois, les liens vers les fichiers que je souhaite surveiller sont copiés dans un fichier, appelons le flux.txt, sous cette forme :
nomlocal https://url.tld/nomdistant.ext
Ainsi pour mettre à jour tous les fichiers, je n'ai plus dès lors qu'à lancer la commande suivante :
cat flux.txt | while read i; do ftp -T -o $i; done
Et tous les fichiers de la liste sont à jour de la dernière version !
L'option -o permet de donner le nom sous lequel enregistrer le fichier distant. D'où la présence de ce nom dans la liste de flux.txt.

Cependant, je ne veux pas relire l'ensemble des fichiers à chaque fois pour trouver les éventuelles mises à jour.
Pour éviter de le faire je garde une double version des fichiers listés dans flux.txt. Les derniers téléchargés dans un dossier nouveaux/. Ceux de la dernière fois où j'ai lancé la commande dans un dossier anciens/.
Avant de lancer la commande ftp(1) je copie les fichiers du dossier nouveaux/ vers le dossier anciens/ :
cp -p nouveaux/* anciens/
L'option -p permet de copier aussi les dates relatives au fichier (modification, accès...).

Avec une copie ancienne et une copie nouvelle, je peux connaître les différences entre les fichiers quand ceux-ci sont mis à jour.
La commande diff(1) vient alors à point nommé :
diff -u anciens/ nouveaux/
et je peux connaître les ajouts et les retraits entre chaque version.

Pour lire tranquillement, souvent plus tard, ces différences, je complète l'appel à diff(1) par l'envoi d'un courriel. Ce qui donne :
diff -u anciens/ nouveaux/ | mail -s "Flux" $(whoami)

Attention, certains sites mettent à jour l'ensemble de leurs fichiers quotidiennement. La date du fichier sur le serveur est donc toujours la date du jour et non la date réelle de dernière modification. Le fichier sera donc téléchargé bien que n'ayant pas été modifié.


Dernière modification : 11 juin 2023