Isso funciona para mim: for a in * ; do mv "$a" $(echo "$a" | cut -d'_' -f 2) ; done
toad:/home/hennes/work/foo>ls -l total 0 -rw------- 1 users 0 Jan 23 22:19 12345678_023454_S60491_I129111.dcm -rw------- 1 users 0 Jan 23 22:19 12345678_123454_S60491_I129111.dcm -rw------- 1 users 0 Jan 23 22:19 12345678_123456_S60491_I129111.dcm toad:/home/hennes/work/foo>for a in * ; do mv $a $(echo $a | cut -d'_' -f 2) ; done toad:/home/hennes/work/foo>ls -l total 0 -rw------- 1 users 0 Jan 23 22:23 023454 -rw------- 1 users 0 Jan 23 22:23 123454 -rw------- 1 users 0 Jan 23 22:23 123456
for a in *
seleciona todos os arquivos. Se houver mais arquivos, um * .dcm poderá ser usado.
mv (move) muda o nome do arquivo
de $ a (o nome do arquivo selecionado para)
ao campo2 do nome, com _
usou um delimitador de campo.
Note que este script irá mover os arquivos, então os nomes dos arquivos antigos serão perdidos. Você pode usar 'cp' em vez de 'mv' para fazer uma cópia.
Se você quiser manter a extensão, adicione-a após o -f 2).
Por exemplo.
for a in * ; do cp $a $(echo $a | cut -d'_' -f 2).dcm ; done