#!/usr/bin/perl -w # # split.pl 0.2 # # Oczekuje pliku typu mailbox na stdin # Dzieli na pojedyńcze wiadomości, które zapisuje w danym katalogu # # Author: Jakub Jankowski # Code released under GNU GPLv2 or later # # ChangeLog: # 0.1 - initial release # 0.2 - ucina wszystkie / kończące ścieżke, nie tylko ostatni, # niemożność otwarcia do zapisu jednego pliku nie powinno wywalać # całości -- przechodzi do następnej wiadomości, # zmiana separatora - zawiera teraz timestamp, # nie nadpisuje istniejących plików - woli pominąć wiadomość # use strict; my $VERSION = "0.2"; # katalog 'domowy' pobierz z linii poleceń... my $dir = shift; # ... lub użyj domyślnego: $dir = "$ENV{HOME}/Mail" unless defined $dir; # wiadomości będą zapisywane jako $prefix$separator$counter my $prefix = "message"; my $separator = "-".time."-"; # utnij kończące '/' ze ścieżki $dir =~ s/([\/]+)$//g; # sprawdź czy da się pisać do katalogu if (! -w $dir) { print(STDERR "Nie mogę pisać do $dir: $!\n"); exit(1); } my $counter = 1; my $o = 0; my $filename = ""; local *OUT; while () { if (/^From /) { if ($o) { close(OUT); $o = 0; } $filename = "$prefix" . "$separator" . "$counter"; if (-f "$dir/$filename") { print(STDERR "Plik $dir/$filename już istnieje, pomijam"); next; } $counter++; open(OUT, ">$dir/$filename") or do { print(STDERR "Nie mogę otworzyć $dir/$filename: $!\n"); next; }; $o = 1; } print(OUT $_); } close(OUT) if $o;