Mercurial > ec-dotfiles
diff bin/prename @ 400:657f787fbae8
Merge remote-tracking branch 'origin/master'
author | Edho Arief <edho@myconan.net> |
---|---|
date | Tue, 04 Sep 2012 10:23:37 +0700 |
parents | f6d29c03142f |
children | 0d928126fcf6 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/prename Tue Sep 04 10:23:37 2012 +0700 @@ -0,0 +1,144 @@ +#!/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