31

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,194
  • 18
  • 43
  • 64
Pieter van Niekerk
  • 659
  • 3
  • 8
  • 12

2 Answers2

49
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,055
  • 7
  • 87
  • 112
15

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,543
  • 2
  • 25
  • 42
  • 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](https://unix.stackexchange.com/q/229230/22222) 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