#!/usr/bin/perl -w
######################################################################
# (c) Michael Schilli 1999
######################################################################
######################################################################
# Aufruf:       todisk.pl
# Beschreibung: Kopiert Dateien aus "dir" in neu angelegte 
#               Verzeichnisse d1, d2, ..., dn, wovon keines mehr als
#               1457664 Bytes enthalten darf.
######################################################################

use File::Copy;
use File::Basename;

$searchdir = "dir";      # Ausgangsverzeichnis
%bytes     = ();         # Verzeichnis-Byte-Hash
$limit     = 1457664;    # Bytes auf einer Diskette
$copydir   = "d";        # Zielverzeichnis

opendir(DIR, "$searchdir") || die "Cannot open $searchdir ($!)";
while(defined ($file = readdir(DIR))) {
    next unless -f "$searchdir/$file";         # Nur Dateien

    my $size = (stat("$searchdir/$file"))[7];  # Größe in Bytes

    for($i=1; ; $i++) {                        # d1, d2, ...
        $dir         = "$copydir$i";           # ausprobieren.

        if(-d "$dir") {                        
                # Paßt Datei noch in existierendes Verzeichnis?
            last if ($bytes{$dir} + $size < $limit);
        } else {
                # Neues Verzeichnis anlegen
            mkdir("$copydir$i", 0755) || die "Cannot create $dir ($!)";
            $bytes{$dir} = 0;
            last;
        }
    }

    print "Copying $searchdir/$file to $dir\n";

    copy("$searchdir/$file", $dir) || 
        die "Cannot copy $searchdir/$file to $dir ($!)";
    $bytes{$dir} += $size;
}
closedir(DIR);
