>>>>> Sebastian Hagedorn <[EMAIL PROTECTED]>:

>>>>> Steinar Bang <[EMAIL PROTECTED]>:

>>> So my questions are:
>>> Is there a way short of redoing the Christmas cleanup from an
>>> email client to get back to the state before the massive
>>> delete/move?  Ie. what if I wrote a perl script that unlinked
>>> everything that had more than one hardlink in
>>> /var/spool/cyrus/mail/s/user/myuser/sub/ and then did
>>> cyrreconstruct?

>> That might work, but you're on your own with it ...

Well, now I've tried it, and it (so far) seems to be working.  I wrote
the script /tmp/unlink_moved_imap_articles.pl, which looks like this:

#!/usr/bin/perl
#
# This script will unlink all files in a directory that has both:
#  - A filename matching the pattern [0-9]+\.
#  - More than one hardlink
#
$dirName=".";
opendir(THISDIR,$dirName) || die "Open of $dirName failed!\n";
@files = grep /[0-9]+\./, readdir(THISDIR);
closedir(THISDIR);

$deletecount = 0;
foreach $file (@files) {
    
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks)
 = stat($file);
    if ($nlink > 1) {
        print "Removing hardlink for $file...";
        unlink($file);
        print "done!\n";
        $deletecount = $deletecount + 1;
    }
}
print "$deletecount files deleted\n";


Then I did the following as root on the cyrus server machine: 
 /etc/init.d/cyrus21 stop
 cd /var/spool/cyrus/mail/m/user/myusername/subfolder/
 /tmp/unlink_moved_imap_articles.pl
 /bin/su cyrus
 /usr/sbin/cyrreconstruct user.myusername.subfolder
 exit
 /etc/init.d/cyrus21 start

Hopefully I won't be bitten at a later stage...:-)

----
Cyrus Home Page: http://asg.web.cmu.edu/cyrus
Cyrus Wiki/FAQ: http://cyruswiki.andrew.cmu.edu
List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html

Reply via email to