#use File::stat; @dirs; $s; $o; $dupes=$files=$folders=$dele=$fld=$efld=0; &recurse("X:\\Music"); sub recurse { $fld=0; my ($f); my ($d) = @_; opendir(D,$d); @FILES = readdir(D); closedir(D); foreach $f (@FILES) { if (length($f) > 2) { $fld++; if ($f !~ /\./) { $dirs[$s++] = "$d/$f"; $folders++} elsif ($f =~ /\(([0-9])\)/) { $g = $f; $g =~ s/\ \(($1)\)//; $files++; $dupes++; print "Duplicate files detected: $d" . '/' . "$f\n\r"; my ($s1) = -s $d . '/' . $f; my ($s2) = -s $d . '/' . $g; if ($s2 != 0 && 100 * abs(1 - $s1 / $s2) < 1){ print "Deleting files (" . fmt($s1) . " <-> " . fmt($s2) . ")!\n\r"; unlink $d . '/' . $f; $dele++; } elsif ($s2 == 0) { print "Null file found - $d" . '/' . "$f\n\r"; unlink $d . '/' . $f; $dele++; } print "\n\r"; } elsif (-s $d . '/' . $f > 1024*40) { $files++; } } } if ($fld == 0){ print "Directory $d is empty\n\r\n\r"; $efld++;} while ($s != $o) { &recurse ($dirs[$o++]); } } print "\n\r\n\r\n\r"; print '-' x 10 . " Stats " . '-' x 10 . "\n\r"; print "Searched files: " . f($files); print "Searched folders:" . f($folders); print "Empty folders: " . f($efld); print "Duplicates found:" . f($dupes); print "Deleted files: " . f($dele); print '-' x 27 . "\n\r"; print "\n\r Finished! Press enter to exit"; ; sub f { return ' ' x (10 - length($_[0])) . $_[0] . "\n\r"; } sub fmt { my ($siz) = @_; my @sizes = ('bytes','Kb','Mb','Gb'); my $s=0; while ($siz > 1024) { $s++; $siz /= 1024; } return sprintf("%.2f",$siz) . ' ' . $sizes[$s]; }