Eliminar prefijos de nombres de archivo

10

Tengo un montón de archivos de la siguiente manera:

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

Necesito cambiarles el nombre para excluir el prefijo. Tiene que verse así ...

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

EDITAR

Olvidé agregar que estoy usando Solaris.

Pieter van Niekerk
fuente

Respuestas:

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

ejecuta esto para asegurarte de que todo está bien.
si es así, elimine echodel comando y cambiará el nombre de los archivos como desee.

"${file#*_}"

es una característica de sustitución habitual en el shell. Elimina todos los caracteres antes del primer _símbolo (incluido el símbolo mismo). Para más detalles mira aquí .

prisa
fuente
¿Podría explicar qué está sucediendo exactamente "${file#*_}"?
Pieter van Niekerk
Agregué una explicación a mi respuesta.
prisa el
En mi opinión, la mayoría de los scripts deben escribirse para hacer eco del resultado del comando deseado. Pero no elimine el echo, solo canalice la salida del script bash.
Jim L.
7

Puede usar la herramienta renamepara esto:

rename "s/.*_//" *

Si lo agrega, -nno cambiará el nombre de nada y solo le mostrará lo que se habría hecho sin él -n.

En respuesta al comentario de rush: my renameis es en realidad un enlace prenameenviado con el perlpaquete de Debian y Ubuntu .

scai
fuente
55
Tenga en cuenta que renameno siempre es igual en diferentes sistemas y, a veces, su sintaxis puede ser diferente.
prisa el
1
El autor de la pregunta ahora ha agregado que está usando Solaris. Entonces, este comando de cambio de nombre (que es específico de Debian y derivados) no está disponible para él.
Gilles 'SO- deja de ser malvado'
1
... a menos que logre construirlo desde la fuente.
sendmoreinfo
@Gilles perl-renameno es en absoluto específico de Debian. Simplemente no se llama renamepero perl-renameo prenameen otras distribuciones. Sin embargo, siempre debe estar en los repositorios y uno también se instala con perl .
terdon
@terdon Un comando para renombrar archivos cuyo uso básico es una expresión perl no es específico de Debian. Tal comando, llamado renamey que probablemente se instalará sin solicitar explícitamente un paquete que no se llama solorename , es específico de Debian. Otras distribuciones de Linux llaman al comando prenameo perl-renamepara evitar confusiones con el util-linux renamey no lo incluyen con el paquete perl, y no conozco ningún unix que no sea Linux que lo envíe bajo el nombre renameo que lo envíe en un instalación predeterminada con cualquier nombre.
Gilles 'SO- deja de ser malvado'