#!/usr/bin/perl use Getopt::Long; use Cwd; use File::Find; use File::Basename; use strict; my $version="0.20"; my ($directory,$delete,$help,$move); GetOptions ("help" => \$help, "directory=s" => \$directory, "delete" => \$delete, "move=s" => \$move); if ($help) { &usage(); exit; } if (!$directory || !-d $directory) { die "Sorry, but you must specify an existant directory.\n"; } if ($move && !-d $move) { die "Sorry, but the backup directory must exist.\n"; } if ($directory eq "." || $directory eq "./") { $directory = cwd(); } elsif ($directory !~ /^\//) { # full path name not specified. So let's add it. $directory = cwd() ."/".$directory; } my $files = &search_dir($directory); &process_files($files,$delete,$move); sub search_dir{ my ($dir)=@_; my (@dirs,@files,$full_name,$file_count,$pattern,@found); # find all directories recursively find sub{push @dirs,$File::Find::name if -d;},$dir; foreach (sort @dirs) { $dir = $_; opendir DIR, "$_"; # @files = sort grep /(.txt|.mp3)$/, readdir DIR; @files = sort grep /(~)$/, readdir DIR; closedir DIR; foreach (@files) { $full_name = $dir."/".$_; push (@found,$full_name); } # end foreach @files } # end foreach sort @dirs return \@found; } sub process_files{ my ($files,$delete,$move)=@_; for (my $i=0;$i<@$files;$i++) { print $files->[$i]."\n"; if ($move) { `mv -f $files->[$i] $move`; } if ($delete && !$move) { `rm -f $files->[$i]`; } } # end for } sub usage{ print <