33

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.

Kevdog777
  • 3,224

2 Answers2

52
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.

rush
  • 27,403
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.

scai
  • 10,793
  • 5
    Note, that rename not always is the same on different systems and sometimes its syntax may differ. – rush Aug 10 '12 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. – Gilles 'SO- stop being evil' Aug 10 '12 at 22:34
  • 1
    ...unless he manages to build it from source. – sendmoreinfo May 17 '13 at 05: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. – terdon Apr 27 '17 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. – Gilles 'SO- stop being evil' Apr 27 '17 at 11:18