145 lines
2.9 KiB
Perl
Executable File
145 lines
2.9 KiB
Perl
Executable File
#!/usr/bin/perl -w
|
|
#
|
|
# This script was developed by Robin Barker (Robin.Barker@npl.co.uk),
|
|
# from Larry Wall's original script eg/rename from the perl source.
|
|
#
|
|
# This script is free software; you can redistribute it and/or modify it
|
|
# under the same terms as Perl itself.
|
|
#
|
|
# Larry(?)'s RCS header:
|
|
# RCSfile: rename,v Revision: 4.1 Date: 92/08/07 17:20:30
|
|
#
|
|
# $RCSfile: rename,v $$Revision: 1.5 $$Date: 1998/12/18 16:16:31 $
|
|
#
|
|
# $Log: rename,v $
|
|
# Revision 1.5 1998/12/18 16:16:31 rmb1
|
|
# moved to perl/source
|
|
# changed man documentation to POD
|
|
#
|
|
# Revision 1.4 1997/02/27 17:19:26 rmb1
|
|
# corrected usage string
|
|
#
|
|
# Revision 1.3 1997/02/27 16:39:07 rmb1
|
|
# added -v
|
|
#
|
|
# Revision 1.2 1997/02/27 16:15:40 rmb1
|
|
# *** empty log message ***
|
|
#
|
|
# Revision 1.1 1997/02/27 15:48:51 rmb1
|
|
# Initial revision
|
|
#
|
|
|
|
use strict;
|
|
|
|
use Getopt::Long;
|
|
Getopt::Long::Configure('bundling');
|
|
|
|
my ($verbose, $no_act, $force, $op);
|
|
|
|
die "Usage: rename [-v] [-n] [-f] perlexpr [filenames]\n"
|
|
unless GetOptions(
|
|
'v|verbose' => \$verbose,
|
|
'n|no-act' => \$no_act,
|
|
'f|force' => \$force,
|
|
) and $op = shift;
|
|
|
|
$verbose++ if $no_act;
|
|
|
|
if (!@ARGV) {
|
|
print "reading filenames from STDIN\n" if $verbose;
|
|
@ARGV = <STDIN>;
|
|
chop(@ARGV);
|
|
}
|
|
|
|
for (@ARGV) {
|
|
my $was = $_;
|
|
eval $op;
|
|
die $@ if $@;
|
|
next if $was eq $_; # ignore quietly
|
|
if (-e $_ and !$force)
|
|
{
|
|
warn "$was not renamed: $_ already exists\n";
|
|
}
|
|
elsif ($no_act or rename $was, $_)
|
|
{
|
|
print "$was renamed as $_\n" if $verbose;
|
|
}
|
|
else
|
|
{
|
|
warn "Can't rename $was $_: $!\n";
|
|
}
|
|
}
|
|
|
|
__END__
|
|
|
|
=head1 NAME
|
|
|
|
rename - renames multiple files
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
B<rename> S<[ B<-v> ]> S<[ B<-n> ]> S<[ B<-f> ]> I<perlexpr> S<[ I<files> ]>
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
C<rename>
|
|
renames the filenames supplied according to the rule specified as the
|
|
first argument.
|
|
The I<perlexpr>
|
|
argument is a Perl expression which is expected to modify the C<$_>
|
|
string in Perl for at least some of the filenames specified.
|
|
If a given filename is not modified by the expression, it will not be
|
|
renamed.
|
|
If no filenames are given on the command line, filenames will be read
|
|
via standard input.
|
|
|
|
For example, to rename all files matching C<*.bak> to strip the extension,
|
|
you might say
|
|
|
|
rename 's/\.bak$//' *.bak
|
|
|
|
To translate uppercase names to lower, you'd use
|
|
|
|
rename 'y/A-Z/a-z/' *
|
|
|
|
=head1 OPTIONS
|
|
|
|
=over 8
|
|
|
|
=item B<-v>, B<--verbose>
|
|
|
|
Verbose: print names of files successfully renamed.
|
|
|
|
=item B<-n>, B<--no-act>
|
|
|
|
No Action: show what files would have been renamed.
|
|
|
|
=item B<-f>, B<--force>
|
|
|
|
Force: overwrite existing files.
|
|
|
|
=back
|
|
|
|
=head1 ENVIRONMENT
|
|
|
|
No environment variables are used.
|
|
|
|
=head1 AUTHOR
|
|
|
|
Larry Wall
|
|
|
|
=head1 SEE ALSO
|
|
|
|
mv(1), perl(1)
|
|
|
|
=head1 DIAGNOSTICS
|
|
|
|
If you give an invalid Perl expression you'll get a syntax error.
|
|
|
|
=head1 BUGS
|
|
|
|
The original C<rename> did not check for the existence of target filenames,
|
|
so had to be used with care. I hope I've fixed that (Robin Barker).
|
|
|
|
=cut
|