Renaming files can be a chore if you are facing about hundreds of files waiting to be renamed. But Linux has a built-in command that can be utilized to rename files by batch with just one line and without using scripts.

rename renames the filenames supplied according to the rule specified as the first argument. The syntax is

rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]

where perlexpr stands for Perl regular expression. Optional switches are

-v, –verbose
Verbose: print names of files successfully renamed.

-n, –no-act
No Action: show what files would have been renamed.

-f, –force
Force: overwrite existing files.

When using rename, it is better to have a better grasp of Perl regular expression. A great source of information about Perl regex can be found in Perl documentation site.

In my example, we will rename these files:

www2.pinoytux.com-2008-01-01
www2.pinoytux.com-2008-01-02
www2.pinoytux.com-2008-01-03
www2.pinoytux.com-2008-01-04
www2.pinoytux.com-2008-01-05
www2.pinoytux.com-2008-01-06
www2.pinoytux.com-2008-02-01
www2.pinoytux.com-2008-02-02
www2.pinoytux.com-2008-02-03
www2.pinoytux.com-2008-02-04
www2.pinoytux.com-2008-02-05
www2.pinoytux.com-2008-02-06

These files have a common pattern to it which is very obvious: the files begin with www2. In this demonstration, we will replace www2 with www. To do this we will need to execute the rename command like so:

$ rename -vn ’s/^www2/www/’ www2*
www2.pinoytux.com-2008-01-01 renamed as www.pinoytux.com-2008-01-01
www2.pinoytux.com-2008-01-02 renamed as www.pinoytux.com-2008-01-02
www2.pinoytux.com-2008-01-03 renamed as www.pinoytux.com-2008-01-03
www2.pinoytux.com-2008-01-04 renamed as www.pinoytux.com-2008-01-04
www2.pinoytux.com-2008-01-05 renamed as www.pinoytux.com-2008-01-05
www2.pinoytux.com-2008-01-06 renamed as www.pinoytux.com-2008-01-06
www2.pinoytux.com-2008-02-01 renamed as www.pinoytux.com-2008-02-01
www2.pinoytux.com-2008-02-02 renamed as www.pinoytux.com-2008-02-02
www2.pinoytux.com-2008-02-03 renamed as www.pinoytux.com-2008-02-03
www2.pinoytux.com-2008-02-04 renamed as www.pinoytux.com-2008-02-04
www2.pinoytux.com-2008-02-05 renamed as www.pinoytux.com-2008-02-05
www2.pinoytux.com-2008-02-06 renamed as www.pinoytux.com-2008-02-06

Note that I used the -n switch so there are no files that were renamed yet. The Perl regular expression ’s/^www2/www/’ means that “substitute www2 with www”. With this Perl regex, we can successfully replace www2.* with www.* without modifying the rest of the filename.

To go ahead with the process, run the command again but without the -n switch:

$ rename -v ’s/^www2/www/’ www2*
www2.pinoytux.com-2008-01-01 renamed as www.pinoytux.com-2008-01-01
www2.pinoytux.com-2008-01-02 renamed as www.pinoytux.com-2008-01-02
www2.pinoytux.com-2008-01-03 renamed as www.pinoytux.com-2008-01-03
www2.pinoytux.com-2008-01-04 renamed as www.pinoytux.com-2008-01-04
www2.pinoytux.com-2008-01-05 renamed as www.pinoytux.com-2008-01-05
www2.pinoytux.com-2008-01-06 renamed as www.pinoytux.com-2008-01-06
www2.pinoytux.com-2008-02-01 renamed as www.pinoytux.com-2008-02-01
www2.pinoytux.com-2008-02-02 renamed as www.pinoytux.com-2008-02-02
www2.pinoytux.com-2008-02-03 renamed as www.pinoytux.com-2008-02-03
www2.pinoytux.com-2008-02-04 renamed as www.pinoytux.com-2008-02-04
www2.pinoytux.com-2008-02-05 renamed as www.pinoytux.com-2008-02-05
www2.pinoytux.com-2008-02-06 renamed as www.pinoytux.com-2008-02-06

$ ls -1
www.pinoytux.com-2008-01-01
www.pinoytux.com-2008-01-02
www.pinoytux.com-2008-01-03
www.pinoytux.com-2008-01-04
www.pinoytux.com-2008-01-05
www.pinoytux.com-2008-01-06
www.pinoytux.com-2008-02-01
www.pinoytux.com-2008-02-02
www.pinoytux.com-2008-02-03
www.pinoytux.com-2008-02-04
www.pinoytux.com-2008-02-05
www.pinoytux.com-2008-02-06

To rename the extension of the file, you can do this one-liner:

rename -v ’s/\.tgz$/\.tar/’ *

This command affects all files in the working directory and the regex matches files ending with .tgz and replaces it with .tar.

The rename command is very flexible but to utilize its full capabilities, one must be familiar with Perl regular expression.

Popularity: 8% [?]

Share and Enjoy:
  • E-mail this story to a friend!
  • StumbleUpon
  • Digg
  • Technorati
  • del.icio.us
  • Reddit
  • Facebook
  • Google
  • Slashdot
  • Blogosphere News
  • TwitThis
  • NewsVine
  • Propeller
  • Furl
  • Simpy
  • Spurl

Related Posts