Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement