#!/usr/bin/perl use strict; no strict qw(subs); (my $progname = $0) =~ s=.*/==; sub err { printf STDERR "%s: %s\n", $progname, join (": ", @_); return 0; } sub msg { print join (": ", @_), "\n"; return 1; } sub xrename_safe { my ($from, $to) = @_; return 0 if ($from eq $to); return err ("rename", join (" -> ", $from, $to), "file already exists") if (-e $to); return msg (join (" -> ", $from, $to)) if (rename ($from, $to)); err ("rename", join (" -> ", $from, $to), $!); } sub main { my $actually_do_it = 0; if ($_[0] eq '-y') { $actually_do_it = 1; shift; } my $re = shift; for my $from (@_) { my ($dirname, $basename) = ("", $from); if ($from =~ /^(.*\/)/) { $dirname = $1; $basename = substr ($from, length $dirname); } eval "\$basename =~ $re"; my $to = $dirname . $basename; if ($actually_do_it) { xrename_safe ($from, $to); } else { msg ("PROPOSED", join (" -> ", $from, $to)); } } } main (@ARGV); # eof