# delIfEmpty.pl deletes file if it's empty. # Original code written 23-sep-2002 by Frank Brown. # # Mod 27-feb-2004 by fgb: handle folders as well as single filespecs. use File::Find; ### global variables: ### $bDebug = 0; $sAppName = "delIfEmpty"; $sFile = ""; $nFilesDeleted = 0; $nFilesRead = 0; $bMultiFiles = 0; $bVerbose = 0; $sVersion = "1.1"; ### let's go: MAIN: unless ($#ARGV + 1) { die "No filename on command line.\n"; # somebody give me an arg! } &ParseCmdArgs(); if ( -d $sFile) { my @dirlist = $sFile; $bMultiFiles = 1; find(\&procFile,@dirlist); } else { &ProcFile($sFile); } if ($bVerbose) { print "$sAppName: deleted $nFilesDeleted out of $nFilesRead files.\n"; } exit; ######## subroutines start here: ######### sub Help { print "\n$sAppName $sVersion deletes file(s) if size == 0 bytes.\n\n"; print "usage: $sAppName filespec\n\n"; } sub ParseCmdArgs { while (@ARGV) { $_ = shift @ARGV; if ($bDebug) { print "debug: parsing cmdline arg $_\n"; } if (/^[\/\-]/) { # is arg a switch? $arg = substr($_,1,3); $arg =~ tr/A-Z/a-z/; # lowercase arg if ($arg eq "deb") { $bDebug = 1; $bVerbose = 1; } if ($bDebug) { print "dbg: arg=$arg\n"; } if ($arg eq "hel" || substr($arg,0,1) eq '?') { &Help(); exit; } if ($arg eq "ver") { $bVerbose = 1; } } else { $sFile = $_; } } if ($bDebug) { print "dbg: bDebug = $bDebug\n"; print "dbg: sFile = $sFile\n"; } } sub procFile { my $sChkFile; my $nSize = 1; if ($bMultiFiles) { $sChkFile = $File::Find::name; } else { $sChkFile = $_[0]; } ++$nFilesRead; $nSize = (stat($sChkFile))[7]; if ( -d $sChkFile) { return; } # ignore directories if ($nSize == 0) { unlink $sChkFile; if ($bVerbose) { print " deleted $sChkFile\n"; } ++$nFilesDeleted; } } __END__