36

I have a bunch of files as follows:

04602635_b0294.DAT20120807164534 04602637_b0297.DAT20120807164713 04602638_b0296.DAT20120807164637 04602639_b0299.DAT20120807164819 04602640_b0298.DAT20120807164748 04602641_b0300.DAT20120807164849 04602650_b0301.DAT20120807164921 04602652_b0302.DAT20120807164956 

I need to rename them to exclude the prefix. It needs to look like this..

b0294.DAT20120807164534 b0297.DAT20120807164713 b0296.DAT20120807164637 b0299.DAT20120807164819 b0298.DAT20120807164748 b0300.DAT20120807164849 b0301.DAT20120807164921 b0302.DAT20120807164956 

EDIT

I forgot to add that I am using Solaris.

2 Answers 2

57
for file in * ; do echo mv -v "$file" "${file#*_}" done 

run this to satisfy that everything is ok.
if it is, remove echo from command and it will rename files as you want.

"${file#*_}" 

is a usual substitution feature in the shell. It removes all chars before the first _ symbol (including the symbol itself). For more details look here.

3
  • 1
    Could you please explain what exactly is happening in "${file#*_}"? Commented Aug 10, 2012 at 13:23
  • I added explanation to my answer. Commented Aug 10, 2012 at 13:31
  • 1
    IMO, most all scripts should be written to echo the desired command output. But don't then remove the echo, just pipe the script output into bash. Commented May 29, 2019 at 16:19
16

You can use the tool Perl's rename for this:

rename "s/.*_//" * 

If you append -n it won't rename anything and just show you what would have been done without -n.

In response to rush's comment: my rename is is actually a link to prename shipped with Debian's and Ubuntu's perl package.

5
  • 5
    Note, that rename not always is the same on different systems and sometimes its syntax may differ. Commented Aug 10, 2012 at 13:34
  • 1
    The asker has now added that he's using Solaris. So this rename command (which is specific to Debian and derivatives) is not available to him. Commented Aug 10, 2012 at 22:34
  • 1
    ...unless he manages to build it from source. Commented May 17, 2013 at 5:47
  • 1
    @Gilles perl-rename is not at all specific to Debian. It's just not called rename but perl-rename or prename in other distributions. It should always be in the repos though and one is installed with perl as well. Commented Apr 27, 2017 at 11:06
  • @terdon A command to rename files whose basic usage is a perl expression is not specific to Debian. Such a command, called rename and likely to be installed without explicitly requesting a package which is not called just rename, is specific to Debian. Other Linux distributions call the command prename or perl-rename to avoid confusion with the util-linux rename and don't bundle it with the perl package, and I'm not aware of any non-Linux unix that ships it under the name rename or that ships it in a default installation under any name. Commented Apr 27, 2017 at 11:18

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.