#!/usr/bin/perl # # # # DVD_DIR_SUM # # This script will find the size of all the directories in # the given master directory, and provide the appropriate # directories which will fit inside a sandard DVD. # Diego Z Pineda # dzpineda86@gmail.com # July 22, 2013 use strict; use warnings; sub nl () { print "\n"; print "\n" } my $in_dir = $ARGV[0]; my $units = $ARGV[1]; my $skip = $ARGV[3]; my $skpdr = "$in_dir/$skip"; my @sks; if ($units !~ m{(K|M)B}i ) { print 'Please use appropriate units KB or MB for 2nd argument.'; nl; exit } my $dvd_s; if ($units =~ m{KB}) { $dvd_s = 4699999 } elsif ($units =~ m{MB}) { $dvd_s = 4699 } my @num = qx[du -B $units -d 1 $in_dir | cut -f 1]; my @dir = qx[du -B $units -d 1 $in_dir | cut -f 2]; my @dig; my @vdr; my $sum = 0; my $pre_elm; my $ni = $#num; my $in = $ni + 1; my $si; if ($skip =~ m{,}) { @sks = split(',', "$skip"); $si = $#sks + 1; for (my $i = 0; $i < $in; $i++) { for (my $j = 0; $j < $si; $j++) { if ($dir[$i] =~ m{$sks[$j]}) { $num[$i] = 0 }}}} elsif ($skip !~ m{,}) { for (my $i = 0; $i < $in; $i++) { if ($dir[$i] =~ m{$skip}) { $num[$i] = 0 }}} else { print "$skip is not a directory. Please ensure $skip is a dir inside $in_dir." } my $str1 = 'Last directory to load is:'; my $str2 = 'Total DVD size is:'; my $str3 = 'Root directory is:'; my $str4 = 'Skipped the following directories'; pop @num; pop @dir; nl; for (my $i = 0; $i < $in; $i++ ) { my $temp = $num[$i]; if ($units =~ m{KB}) { $units =~ s{KB}{kB}g } $temp =~ s{$units}{}g; $temp =~ s{ $}{}g; chomp $temp; push @dig, $temp } for (my $i = 0; $i < $in; $i++ ) { my $temp = $dir[$i]; $temp =~ s{$in_dir/}{}g; chomp $temp; push @vdr, $temp } for (my $i = 0; $i < $in; $i++) { if ($sum < $dvd_s) { $sum = $sum + $dig[$i]; $pre_elm = $i }} my $tru_sum = $sum - $dig[$pre_elm]; my $tru_elm = $pre_elm - 1; my $tru_dir = $vdr[$tru_elm]; if ($ARGV[2] =~ m{yes|y}i) { print "$str3\t$in_dir"; nl; for (my $i=0; $i < $tru_elm; $i++) { print "$dig[$i] $units\t\t$vdr[$i]"; nl }} print "$str1\t$tru_dir"; nl; print "$str2\t$tru_sum $units"; nl; if ($skip !~ "" && $skip !~ m{,}) { print "$str4:\t\t$skip"; nl } elsif ($si > 0) { print "$str4:"; for (my $i = 0; $i < $si; $i++) { my $i2 = $i + 1; nl; print "$i2\t\t$sks[$i]" }}