Remover prefixos de nomes de arquivos

9

Eu tenho vários arquivos da seguinte forma:

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

Eu preciso renomeá-los para excluir o prefixo. Precisa ficar assim ...

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

EDITAR

Esqueci de adicionar que estou usando o Solaris.

    
por Pieter van Niekerk 10.08.2012 / 15:04

2 respostas

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

execute isto para satisfazer que tudo está bem.
se estiver, remova o comando echo from e ele renomeie os arquivos como desejar.

"${file#*_}"

é um recurso de substituição usual no shell. Remove todos os chars antes do primeiro símbolo _ (incluindo o próprio símbolo). Para mais detalhes, veja aqui .

    
por 10.08.2012 / 15:10
7

Você pode usar a ferramenta rename para isso:

rename "s/.*_//" *

Se você acrescentar -n , ele não renomeará nada e apenas mostrará o que teria sido feito sem -n .

Em resposta ao comentário de rush: meu rename é na verdade um link para prename fornecido com o pacote perl do Debian e do Ubuntu.

    
por 10.08.2012 / 15:12