#!/usr/bin/perl use strict; use warnings; my ($k,$nom); my $maxsize = 690_000; my $makeiso = 0; my $pattern = "*"; my @CD = ([0,[]]); my $i; my $inserted = 0; use Data::Dumper; for (@ARGV) { $maxsize = $1 if /-ma*x*s*i*z*e*=(\d+)/; $makeiso = 1 if /-mkisofs/; $pattern = $1 if /-pattern=(.*)/; die "usage $0 -max=xxx (maxsize in K) -mkisofs -pattern='*.gz' -help" if (/-he*l*p*/) ; } my $pid = open(SOURCE, "du -sk $pattern|sort -nr|") or die "Couldn't get SOURC while () { chop; ($k ,$nom ) = split /\t/,$_,2; $inserted = 0; if ($k > $maxsize) { print '"' . $nom . '"' . " out of Range $k\n"; next; } foreach $i ( 0 .. $#CD ) { my $rcontent = \@{$CD[$i]} ; if ($rcontent->[0] <= ($maxsize - $k)) { $rcontent->[0] = $rcontent->[0] + $k; push @{$rcontent->[1]},$nom; $inserted = 1; } last if $inserted; } if (! $inserted) { push @CD,[$k,[$nom]] }; } close(SOURCE) or die "Couldn't close: $!\n"; if ($makeiso) { foreach $i ( 0 .. $#CD ) { my $rcontent = \@{$CD[$i]} ; print "mkisofs -o cd$i.iso " . join " ", map {qq/'$_'/} @{$rcontent->[1]}; print "\n"; } } else { $Data::Dumper::Varname="CD"; print Data::Dumper::Dumper(@CD); }