From 30017b489b457138dedc3c04daa744cfb20fb96e Mon Sep 17 00:00:00 2001 From: Ward Wouts Date: Sat, 26 Oct 2002 20:20:00 +0000 Subject: [PATCH] - remove only option added - some code cleanups --- safe_mv/safe_mv | 67 ++++++++++++++++++++++++++++--------------------- 1 file changed, 39 insertions(+), 28 deletions(-) diff --git a/safe_mv/safe_mv b/safe_mv/safe_mv index 8479300..5c1010e 100755 --- a/safe_mv/safe_mv +++ b/safe_mv/safe_mv @@ -1,16 +1,15 @@ #!/usr/bin/perl -w -# $Dwarf: safe_mv,v 1.3 2002/10/24 11:06:06 ward Exp $ +# $Dwarf: safe_mv,v 1.4 2002/10/26 17:18:46 ward Exp $ # $Source$ # # Scriptje om bestanden te moven, en bij het reeds bestaan van een bestand -# op de plek waar het naartoe gemoved wordt eerst even te vergelijken +# op de plek waar het naartoe gemoved wordt eerst even te vergelijken # of ze identiek zijn. Zo nee, gaat de move niet door. Zo ja, delete # te moven bestand. -# (C) 2001 Ward Wouts # -# Argumenten $source-bestanden $target-dir +# (C) 2001-2002 Ward Wouts # use File::Copy; @@ -19,30 +18,26 @@ use Getopt::Long; $DEBUG = 0; -if ($#ARGV < 1) { &help; } +&cmdline; +&process; -$targetdir=pop; -if ( ! -d $targetdir ) { &help; } -if ( $DEBUG ) { print "$targetdir\n"; } +$opt_r = 1; # just get rid of that stupid message from -w -foreach ( @ARGV ) { - $source = "$_"; - $target = "$_"; - $target =~ s/.*\///; - $target = $targetdir."/".$target; - if ( -e "$target" ) { - &compare($source, $target); - } else { - if ( $DEBUG ) { print "mv $_ -> $target\n"; } - else { move("$_", "$target") or die "move failed: $!"; } +sub process { + foreach ( @sources ) { + $source = "$_"; + $target = "$_"; + $target =~ s/.*\///; + $target = $targetdir."/".$target; + if ( -e "$target" ) { + &compare($source, $target); + } elsif ( ! $opt_r ) { + if ( $DEBUG ) { print "mv $_ -> $target\n"; } + else { move("$_", "$target") or die "move failed: $!"; } + } } } -sub help { - print "Usage: $0 source_files target_dir\n"; - exit 1; -} - sub compare($source, $target) { my ($source_size, $target_size); my (@source_stat, @target_stat); @@ -55,14 +50,14 @@ sub compare($source, $target) { ( $source_stat[0] == $target_stat[0] )) { print "Skipped $source & $target are one and the same!\n" } else { - if ( $DEBUG ) { print "$source and $target are the same size\n"; } + print "$source and $target are the same size\n" if $DEBUG; $source_digest = &calc_md5($source); - if ( $DEBUG ) { print "source digest $source_digest\n"; } + print "source digest $source_digest\n" if $DEBUG; $target_digest = &calc_md5($target); - if ( $DEBUG ) { print "source digest $target_digest\n"; } + print "source digest $target_digest\n" if $DEBUG; if ( $source_digest eq $target_digest ) { print "Files are the same. Deleting $source.\n"; - unlink($source) + unlink($source) or die "Can't delete $source: $!\n"; } else { print "Skipped mv $source -> $target files differ\n" @@ -87,12 +82,28 @@ sub calc_md5($file) { } sub cmdline { + &GetOptions("h", "r"); + + &help if $opt_h; + + if ($#ARGV < 1) { &help; } + + $targetdir=pop(@ARGV); + if ( ! -d $targetdir ) { &help; } + if ( $DEBUG ) { print "$targetdir\n"; } + + @sources = @ARGV; } sub help { - print < +-h this help message +-r remove duplicates only, don't move files + EOT + exit 1; }