Bash Help: Renaming all files in a Directory

Robin Laing Robin.Laing at drdc-rddc.gc.ca
Mon Jul 24 15:31:22 UTC 2006


Steven W. Orr wrote:
> On Friday, Jul 21st 2006 at 19:27 -0400, quoth Thom Paine:
> 
> =>I'm making a digital picture frame out of an old laptop and the pic
> =>viewer doesn't support filenames with spaces in them.
> =>
> =>Is there a quick command I can type to process all files in a
> =>directory that will rename the files from "Family Pic 001.jpg" to
> =>"FamilyPic001.jpg"?
> 
> You've gotten a lot of bash suggestions, ranging from the sublime to the 
> absurd. Here's my fave:
> 
> 514 > cat ~/bin/rename
> #!/usr/bin/perl
> $op = shift;
> for (@ARGV) {
>     $was = $_;
>     eval $op;
>     die $@ if $@;
>     rename($was,$_) unless $was eq $_;
> }
> 515 > 
> 
> Since it uses perl, you can do regex magic plus more. Your problem would 
> be solved with
> 
> rename 's/ //g' *.jpg
> 
> but you can also play games like
> 
> rename 'tr/A-Z/a-z/' *.jpg to flip things to lowercase.
> 
> Enjoy.
> 

You beat me to the perl script.

I have been using a form of this script for years.  I put it in my 
personal bin directory and it is so powerful.

The only caution is it will overwrite files that already exist so you 
have to be careful.


-- 
Robin Laing




More information about the users mailing list