peterr has asked for the wisdom of the Perl Monks concerning the following question:
I'm using a Perl script to convery KMail emails to Claws email. There were a few errors
#!/usr/bin/perl -w # * This file is free software; you can redistribute it and/or modify + it # * under the terms of the GNU General Public License as published by # * the Free Software Foundation; either version 2 of the License, or # * (at your option) any later version. # * # * This program is distributed in the hope that it will be useful, b +ut # * WITHOUT ANY WARRANTY; without even the implied warranty of # * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # * General Public License for more details. # * # * You should have received a copy of the GNU General Public License # * along with this program; if not, write to the Free Software # * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 021 +10-1301, USA. # * # * Copyright 2003-2007 Paul Mangan <paul@claws-mail.org> # * # * 2007-02-25: several fixes for kmail 1.9.6 # --kmaildir now expects the full path # renamed from maildir2claws-mail.pl to kmail-mailbox2claws-ma +il.pl # * 2003-10-01: add --debug and --dry-run options # * 2003-09-30: updated/improved by Matthias Förste <itsjustme@users. +sourceforge.net> # * 2003-05-27: version one ## script name : kmail-mailbox2claws-mail.pl ## script purpose : convert a Kmail mailbox into a Claws Mail mailbox ## USAGE: kmail-mailbox2claws-mail.pl --kmaildir=/full/path/to/kmail/m +ailbox ## tested with Kmail version 1.9.6 use strict; use Getopt::Long; use File::Find; my $kmaildir = ''; my $iNeedHelp = ''; # dont actually change anything if set(useful in conjunction with debu +g) my $PRETEND = ''; # print debug info if set my $DEBUG = ''; my $claws_tmpdir = "$ENV{HOME}/claws_tmp"; GetOptions("kmaildir=s" => \$kmaildir, "help" => \$iNeedHelp, "dry-run" => \$PRETEND, "debug" => \$DEBUG); if ($kmaildir eq "" || $iNeedHelp) { if (!$iNeedHelp) { print "No directory name given\n"; } print "Use the following format:\n"; print "\tkmail-mailbox2claws-mail.pl --kmaildir=full-path-to-kmail +-dir\n\n"; exit; } my $count = 1; my $MAIL_dir = "$kmaildir"; my $find_opts = { wanted => \&process }; if (-d $MAIL_dir) { find($find_opts , ($MAIL_dir)); } else { print "\n$MAIL_dir is not a directory !\n"; exit; } unless ($PRETEND) { mkdir("$claws_tmpdir", 0755); system("mv $claws_tmpdir $ENV{HOME}/Mail"); print "\n\nSucessfully converted mailbox \"$MAIL_dir\"\n"; print "Start claws-mail and right-click \"Mailbox (MH)\" and "; print "select \"Rebuild folder tree\"\n"; print "You may also need to run \"/File/Folder/Check for "; print "new messages in all folders\"\n\n"; } print "\n"; exit; sub process() { if (-d) { process_dir($File::Find::dir); } else { process_file($File::Find::name); } } sub process_dir() { my $direc = shift(); $DEBUG && print "\nDIR $direc"; if ($direc !~ m/^drafts$/ && $direc !~ m/^outbox$/ && $direc !~ m/^trash$/ && $direc !~ m/^inbox$/) { my $tmpdir = $direc; $tmpdir =~ s/^$MAIL_dir//; $tmpdir =~ s/\/sent-mail$/sent/; $tmpdir =~ s/\/cur$//; $tmpdir =~ s/\/new$//; $tmpdir =~ s/^\///; $tmpdir =~ s/\.directory//g; $tmpdir =~ s/\.//g; my $newdir = "$claws_tmpdir/$tmpdir"; $DEBUG && print qq{\n>>> -e "$newdir" || mkdir("$newdir")}; $PRETEND || -e "$newdir" || mkdir("$newdir"); } } sub process_file { my $file = shift; $DEBUG && print "\nFILE $file"; my $nfile; my $tmpfile = $file; $tmpfile =~ s|^$kmaildir||; if ($tmpfile =~ m/\/cur\// || $tmpfile =~ m/\/new\//) { $tmpfile =~ s/\/new//; $tmpfile =~ s/\/cur//; my @spl_str = split("/", $tmpfile); pop(@spl_str); push(@spl_str, "$count"); foreach my $spl_str (@spl_str) { $spl_str =~ s/\.directory$//; $spl_str =~ s/^\.//; $spl_str =~ s/^sent-mail$/sent/; } $nfile = join("/", @spl_str); $nfile = $claws_tmpdir.$nfile; } if (-e "$file" && $nfile ne "") { $DEBUG && print qq{\n+++ cp "$file" "$nfile"}; $PRETEND || system("cp \"$file\" \"$nfile\""); $count++; } }
cp: cannot create regular file '/home/********/claws_tmp/*******/Misc. (PO,NRMA,etc)/711': No such file or directory
Is this simply because the file is attempted to be copied before the path exists ? How do I fix that please
Also this error ...
Use of uninitialized value $nfile in string ne at kmail-mailbox2claws-mail.pl line 149.
It is defined at libe 125, but not initialised; is that all that needs doing there ?
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Convert KMail emails to Claws
by kcott (Archbishop) on Apr 27, 2017 at 06:21 UTC | |
by peterr (Scribe) on Apr 28, 2017 at 04:13 UTC | |
Re: Convert KMail emails to Claws
by shmem (Chancellor) on Apr 27, 2017 at 06:21 UTC | |
by peterr (Scribe) on Apr 28, 2017 at 04:19 UTC | |
by huck (Prior) on Apr 28, 2017 at 04:32 UTC | |
Re: Convert KMail emails to Claws
by poj (Abbot) on Apr 27, 2017 at 06:34 UTC | |
by peterr (Scribe) on Apr 28, 2017 at 04:26 UTC | |
Re: Convert KMail emails to Claws
by peterr (Scribe) on Apr 28, 2017 at 05:12 UTC |