[Pdx-pm] command line question

Thomas J Keller kellert at ohsu.edu
Mon Jul 12 16:43:11 CDT 2004


Whoops, I take it back. It does work on goofy filenames w i t h spaces 
;-)
Thanks,
Tom K

On Jul 12, 2004, at 2:27 PM, Eric Wilhelm wrote:

> # The following was supposedly scribed by
> # Colin Kuskie
> # on Monday 12 July 2004 04:16 pm:
>
>> The original perl distribution used to include a program called rename
>> that allowed you to pass a line of perl code that would modify each
>> filename in any way you want.
>
> Debian still does this (it's in the 'perl' package.)  Redhat had a 
> compiled
> 'rename' which used a different pattern language
>
> I prefer the regex-based pattern expression.
>
> --Eric
>
> $cat `which rename`
> #!/usr/bin/perl -w
> #
> #  This script was developed by Robin Barker (Robin.Barker at 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
> _______________________________________________
> Pdx-pm-list mailing list
> Pdx-pm-list at mail.pm.org
> http://mail.pm.org/mailman/listinfo/pdx-pm-list





More information about the Pdx-pm-list mailing list