For the more general case, there's Larry's filename fixer, from the Perl Cookbook (and I'm sure I've seen it in print elsewhere, too):
#!/usr/bin/perl
# -w switch is off bc HERE docs cause erroneous messages to be display
+ed under Cygwin
#From the Perl Cookbook, Ch. 9.9
# rename - Larry's filename fixer
$help = <<EOF;
Usage: rename expr [files]
This script's first argument is Perl code that alters the filename (st
+ored in \$_ ) to reflect how you want the file renamed. It can do thi
+s because it uses an eval to do the hard work. It also skips rename c
+alls when the filename is untouched. This lets you simply use wildcar
+ds like rename EXPR * instead of making long lists of filenames.
Here are five examples of calling the rename program from your shell:
% rename 's/\.orig$//' *.orig
% rename 'tr/A-Z/a-z/ unless /^Make/' *
% rename '$_ .= ".bad"' *.f
% rename 'print "$_: "; s/foo/bar/ if <STDIN> =~ /^y/i' *
% find /tmp -name '*~' -print | rename 's/^(.+)~$/.#$1/'
The first shell command removes a trailing ".orig" from each filename.
The second converts uppercase to lowercase. Because a translation is u
+sed rather than the lc function, this conversion won't be locale-awar
+e. To fix that, you'd have to write:
% rename 'use locale; $_ = lc($_) unless /^Make/' *
The third appends ".bad" to each Fortran file ending in ".f", somethin
+g a lot of us have wanted to do for a long time.
The fourth prompts the user for the change. Each file's name is printe
+d to standard output and a response is read from standard input. If t
+he user types something starting with a "y" or "Y", any "foo" in the
+filename is changed to "bar".
The fifth uses find to locate files in /tmp that end with a tilde. It
+renames these so that instead of ending with a tilde, they start with
+ a dot and a pound sign. In effect, this switches between two common
+conventions for backup files
EOF
$op = shift or die $help;
chomp(@ARGV = <STDIN>) unless @ARGV;
for (@ARGV) {
$was = $_;
eval $op;
die $@ if $@;
rename($was,$_) unless $was eq $_;
}
(Notice that about 90% of that is comments and usage.)
Using that script, you can say:
rename 's/ABC //' *.doc
to rename all files with 'ABC ' in the name.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|